Вы просто добавляете строковые литералы? Или вы собираетесь добавлять различные типы данных (целые числа, числа с плавающей запятой и т. Д.)?
Может быть проще абстрагировать это в свою собственную функцию (в следующем предполагается C99):
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
int appendToStr(char *target, size_t targetSize, const char * restrict format, ...)
{
va_list args;
char temp[targetSize];
int result;
va_start(args, format);
result = vsnprintf(temp, targetSize, format, args);
if (result != EOF)
{
if (strlen(temp) + strlen(target) > targetSize)
{
fprintf(stderr, "appendToStr: target buffer not large enough to hold additional string");
return 0;
}
strcat(target, temp);
}
va_end(args);
return result;
}
И вы бы использовали это так:
char target[100] = {0};
...
appendToStr(target, sizeof target, "%s %d %f\n", "This is a test", 42, 3.14159);
appendToStr(target, sizeof target, "blah blah blah");
и т.д.
Функция возвращает значение из vsprintf
, которое в большинстве реализаций является количеством байтов, записанных в место назначения. В этой реализации есть несколько дыр, но она должна дать вам некоторые идеи.