gpt4 book ai didi

c99 - 可以使用打印到 FILE* 的输出例程在 C 中构建字符串吗?

转载 作者:行者123 更新时间:2023-12-05 00:24:13 24 4
gpt4 key购买 nike

我有一种不好的预感,这个问题的答案是“否”,但我想把它扔在那里,以防有人有任何聪明的想法。

我有一组输出例程,它们采用复杂的数据结构并以文本格式打印。他们的原型(prototype)如下:

void print_mystruct(struct mystruct *s, FILE *stream)

我这样写是为了能够高效、缓冲地输出到终端、文件、网络等。

不幸的是,据我所知,使用标准 C99,我无法使用这些相同的例程在内存中构建字符串。

所以我的问题是:

  1. 有什么聪明的方法可以有效地使用 fputs()、fprintf() 等来输出到字符串吗?
  2. 如果没有,是否有更好的范例可以有效地进行缓冲文件输出和字符串构建?我能想到的最好的办法是拥有自己的结构和 vtable(而不是 FILE*)。 vtable 将有一个输出函数,可以附加到字符串或调用 fwrite。但是我还必须创建 printf 包装器。

还有其他聪明的想法吗?

编辑:我发现 fmemopen() 是 POSIX.1-2008 的一部分(参见:fmemopen())但未得到广泛支持,至少根据 GNU libc 联机帮助页是这样。

最佳答案

没有可移植的方法来执行此操作。 glibc 系统 (linux) 有 open_memstream/fmemopen ,其他系统可能没有类似的东西。

可移植的方法是写入文件并将其读回字符串。 ,或者分离关注点。而不是实现

void print_mystruct(struct mystruct *s,FILE *f);

你会实现

char *mystruct_2_str(struct mystruct *s);

它动态分配一个字符串(或传入缓冲区),使用标准字符串函数(snprintf 等)将其格式化为字符串,并让调用者决定是否将其写入 FILE*

关于c99 - 可以使用打印到 FILE* 的输出例程在 C 中构建字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1270212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com