If you have vsnprintf, available to you, I would take advantage of this. It prevents buffer overflows because you provide a buffer size, and it returns the required actual size.
, 1K-, vsnprintf , . , , .
, realloc, . (, ), , , .
. , (. ).
vsnprintf -type, , , - /dev/null ( ). vfprintf , ( -), vsprintf . , , .
, 1K-. malloc , , .
, - :
int test(const char* format, ...)
{
char buff1k[1024];
char *buffer = buff1k;
:
int need = 1 + vsnprintf (buffer, sizeof (buff1k), format, arguments);
if (need > sizeof (buff1k)) {
buffer = malloc (need);
}
...
if (buffer != buff1k)
free (buffer);
}
source
share