print2fp(const void *buffer, size_t size, FILE *stream) {
if(fwrite(buffer, 1, size, stream) != size)
return -1;
return 0;
}
Как записать данные в строковый поток вместо потока файлов?
print2fp(const void *buffer, size_t size, FILE *stream) {
if(fwrite(buffer, 1, size, stream) != size)
return -1;
return 0;
}
Как записать данные в строковый поток вместо потока файлов?
В стандарте posix 2008 есть очень аккуратная функция: open_memstream(). Вы используете его следующим образом:
char* buffer = NULL;
size_t bufferSize = 0;
FILE* myStream = open_memstream(&buffer, &bufferSize);
fprintf(myStream, "You can output anything to myStream, just as you can with stdout.\n");
myComplexPrintFunction(myStream); //Append something of completely unknown size.
fclose(myStream); //This will set buffer and bufferSize.
printf("I can do anything with the resulting string now. It is: \"%s\"\n", buffer);
free(buffer);
просто используйте sprintf http://www.cplusplus.com/reference/cstdio/sprintf/
пример из refference:
#include <stdio.h>
int main ()
{
char buffer [50];
int n, a=5, b=3;
n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
printf ("[%s] is a string %d chars long\n",buffer,n);
return 0;
}
Вывод:
[5 плюс 3 - 8] - строка длиной 13 символов
Обновление: На основе рекомендаций в комментариях: Используйте snprinft, поскольку он более безопасен (предотвращает атаки переполнения буфера) и переносится.
#include <stdio.h>
int main ()
{
int sizeOfBuffer = 50;
char buffer [sizeOfBuffer];
int n, a=5, b=3;
n= snprintf (buffer, sizeOfBuffer, "%d plus %d is %d", a, b, a+b);
printf ("[%s] is a string %d chars long\n",buffer,n);
return 0;
}
Обратите внимание, что аргумент snprintf seconds - это фактически максимально допустимый размер, поэтому вы можете поместить его в меньшее значение, чем sizeOfBuffer, однако для вашего случая это было бы необязательно. Snprintf только записывает символы SizeOfBuffer -1 и использует последний байт для символа завершения.
И просто, чтобы разозлить всех из отдела обложек и безопасности, вот ссылка на http://www.cplusplus.com/reference/cstdio/snprintf/