在阅读有关string streams的GNU文档时,我发现了两个类似的功能,它们的功能非常相似:
FILE * fmemopen (void *buf, size_t size, const char *opentype)
FILE * open_memstream (char **ptr, size_t *sizeloc)
通过阅读文档,似乎应该使用
open_memstream
打开输出流,并使用fmemopen
输入。让我着迷的是可以传递给opentype
的fmemopen
参数。linux manpage explains:
那么,如果
open_memstream
可以处理打开输入/输出流,那么使用fmemopen
有什么意义呢? 最佳答案
使用fmemopen
,缓冲区将在打开时或之前分配,并且以后不会更改大小。如果要编写它,则必须在开始之前知道输出的大小。使用open_memstream
时,缓冲区随着您的写入而增长。