How do you suppose memory is acquired? You could do something like this:
Example:
Code:
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
char *multistrcat(const char *a, ...)
{
va_list list;
char *r;
const char *next;
size_t length = 1 + strlen(a);
va_start(list, a);
for(next = (const char *)va_arg(list);next;next = (const char *)va_arg(list))
length += strlen(next);
va_end(list);
r = malloc(length);
if(!r)
return 0;
strcpy(r, a);
va_start(list, a);
for(next = (const char *)va_arg(list);next;next = (const char *)va_arg(list))
strcat(r, next);
va_list(end);
return r;
}
No "wasted" memory.