我有一种不好的感觉,这个问题的答案是“不”,但我想把它扔在那里,以防有人有任何聪明的想法。
我有一组输出例程,它们采用复杂的数据结构并以文本格式打印它。他们的原型如下:
void print_mystruct(struct mystruct *s, FILE *stream)
我这样写是为了获得高效的缓冲输出到终端、文件、网络等。
不幸的是,据我所知,使用标准 C99,我无法使用这些相同的例程在内存中构建字符串。
所以我的问题是:
- 有什么聪明的方法可以有效地使用 fputs()、fprintf() 等输出到字符串?
- 如果没有,是否有更好的范例可以有效地进行缓冲文件输出和字符串构建?我能想到的最好的方法是使用 vtable(而不是 FILE*)拥有自己的结构。vtable 将有一个输出函数,可以附加到字符串或调用 fwrite。但是我还必须创建 printf 包装器。
还有其他聪明的想法吗?
编辑:我发现它fmemopen()
是 POSIX.1-2008 的一部分(参见:fmemopen())但没有得到广泛支持,至少根据 GNU libc 手册页。