Для этого при одиночном вызове функции вам потребуется asprintf()
, доступный на вашей платформе (или аналогичная реализация библиотеки). Большинство современных библиотек C предлагают его, однако вам, возможно, придется включить его как расширение через препроцессор.
Linux-ориентированный пример того, что вы хотите (то есть, я полагаю, чтобы вернуть выделенную / комбинированную строку):
#define _GNU_SOURCE /* Telling the compiler we want extensions */
#include <stdio.h>
int main(void)
{
char *text1 = "foo";
char *text2 = "bar";
char *text3 = NULL;
int bytes_printed = 0;
bytes_printed = asprintf(&text3, "%s%s123456789", text1, text2);
if (bytes_printed < 0 || text3 == NULL) {
fprintf(stderr, "Asprintf failed to allocate memory!\n");
return 1;
}
printf("Asprintf printed %d bytes to text3, which is %s\n",
bytes_printed, text3);
free(text3);
return 0;
}
Это единственный способ сделать это при вызове функции single , возвращающей выделенную строку.
Чтобы обеспечить его переносимость, вам, вероятно, следует использовать его библиотечную реализацию в своем дереве, что-то вроде my_asprintf()
, которое эффективно работает с системами, которые его не предлагают.
Вы можете извлечь его прямо из исходных текстов библиотеки C для glibc, я полагаю, BSD, даже новые операционные системы, такие как HelenOS, предлагают его.