diff --git a/c-programming/asprintf.c b/c-programming/asprintf.c index 4dbdda5..cdb6363 100644 --- a/c-programming/asprintf.c +++ b/c-programming/asprintf.c @@ -11,19 +11,20 @@ ssize_t asprintf(char** strp, char* format, ...) { va_list args; va_start(args, format); - ssize_t size = (ssize_t) vsnprintf(NULL, 0, format, args); - if (size < 0) { + ssize_t result = (ssize_t) vsnprintf(NULL, 0, format, args); + if (result < 0) { va_end(args); return -1; } - *strp = malloc(++size); + size_t size = (size_t) result + 1; + *strp = malloc(size * sizeof(char)); if (*strp == NULL) { va_end(args); return -1; } - ssize_t result = (ssize_t) vsnprintf(*strp, size, format, args); + result = (ssize_t) vsnprintf(*strp, size, format, args); va_end(args); if (result < 0) {