在阅读有关string streams的GNU文档时,我发现了两个类似的功能,它们的功能非常相似:

FILE * fmemopen (void *buf, size_t size, const char *opentype)
FILE * open_memstream (char **ptr, size_t *sizeloc)

通过阅读文档,似乎应该使用open_memstream打开输出流,并使用fmemopen输入。让我着迷的是可以传递给opentypefmemopen参数。

linux manpage explains:



那么,如果open_memstream可以处理打开输入/输出流,那么使用fmemopen有什么意义呢?

最佳答案

使用fmemopen,缓冲区将在打开时或之前分配,并且以后不会更改大小。如果要编写它,则必须在开始之前知道输出的大小。使用open_memstream时,缓冲区随着您的写入而增长。

09-28 06:19