diff --git a/main.h b/main.h index 93c6ff7..ab2c9b1 100644 --- a/main.h +++ b/main.h @@ -6,5 +6,6 @@ int _strlen(const char *str); char *_strcpy(char *dest, char *src); char *append(char *str, char c); void _puts(char *str); +char* _memset(char *str, int bval); #endif diff --git a/memset.c b/memset.c new file mode 100644 index 0000000..4758670 --- /dev/null +++ b/memset.c @@ -0,0 +1,22 @@ +#include "main.h" + +/** + * _memset - sets values of bytes to specific value + * + * @adr: head address + * @n: number of bytes + * + * Return: pointer to place + */ + +char* _memset(char *str, int bval) +{ + int i; + + for (i = 0; i < _strlen(str); i++) + { + *(str + i) = bval; + } + + return (str); +} diff --git a/printf.c b/printf.c index ae09c2f..7ce259c 100644 --- a/printf.c +++ b/printf.c @@ -19,7 +19,7 @@ int _printf(const char *format, ...) va_start(args, format); identifiers = _contains(format, '%'); - BUFF_SIZE = _strlen(format) - (identifiers * 2); + BUFF_SIZE = _strlen(format) - identifiers; buffer = malloc(BUFF_SIZE); if (!format) /* No string. No laundry */ @@ -28,24 +28,34 @@ int _printf(const char *format, ...) { if ((*(format + fmt_idx) == '%') && (*(format + fmt_idx + 1))) { - switch (*(format + 1)) /*this needs to shrink*/ + if (*buffer) + { + _puts(buffer); + free(buffer); + buffer = malloc(BUFF_SIZE); + buff_idx = 0; + } + switch (*(format + fmt_idx + 1)) /*this needs to shrink*/ { case 's': next = va_arg(args, char*); /*Store string temporarily*/ - buffer = _strcpy(buffer, next); - BUFF_SIZE = _strlen(buffer); - buff_idx += _strlen(next); + write(1, next, _strlen(next)); break; case 'c': /* add 1 byte and i++ */ - c = (char) va_arg(args, int); - buffer = append(buffer, c); - BUFF_SIZE += 1; - buff_idx += 1; + c = va_arg(args, int); + write(1, &c, 1); break; case '%': /*add 1 byte*/ break; } - fmt_idx += 2; + if (*(format + fmt_idx + 2)) + { + fmt_idx += 2; + } + else + { + fmt_idx += 1; + } } else { @@ -54,6 +64,10 @@ int _printf(const char *format, ...) fmt_idx++; } } - write(1, buffer, BUFF_SIZE + 1); + if (*buffer) + { + _puts(buffer); + free(buffer); + } return (_strlen(buffer)); } diff --git a/tests/char_print.c b/tests/char_print.c index ca1104e..cf7875d 100644 --- a/tests/char_print.c +++ b/tests/char_print.c @@ -8,9 +8,9 @@ int main(void) { - char c = 'c'; + char c = 97; - _printf("%c%c", c, c); + _printf("%c%c\n", c, c); _printf("cat: %c\n", c); return (0); }