C中的字符串流

print2fp(const void *buffer, size_t size, FILE *stream) { if(fwrite(buffer, 1, size, stream) != size) return -1; return 0; } 

如何将数据写入字符串流而不是文件流?

posix 2008标准中有一个非常简洁的function: 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/

参考的例子:

 #include  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  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/