Вы просто добавляя строковые литералы? Или вы собираетесь добавлять различные типы данных (ints, float и т. Д.)?
Это может быть проще абстрагироваться на это в свою собственную функцию (следующее предполагает 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
, которое в большинстве реализаций представляет собой количество байтов, записанных в пункт назначения. В этой реализации есть несколько явлений, но это должно дать вам некоторые идеи.
Я не буду использовать Sprintf но snprintf, я не буду использовать Е (НТР), но Е («% S», ул) –