【发布时间】:2014-02-18 06:06:26
【问题描述】:
有什么方法可以将 stdout 文件流(C 标准输出)重定向到 Windows 中的缓冲区?
唯一对我有用的是:
FILE *fp = freopen("output.txt", "w", stdout);
printf("Hello\n");
fclose(fp);
但我总是必须读回文件才能获取缓冲区内容。有什么方法可以直接将其重定向到内存缓冲区?
【问题讨论】:
-
必须是 C 代码吗?否则,只需在启动程序时使用 > 重定向
-
是的,不幸的是在代码中。
-
我想直接将 stdout 重定向到一个 char 数组中,而不是将其写入文件然后将其读入 char 数组。
-
您可以将所有
printfs 替换为myprintf,其中myprintf是类似于fprintf的函数,但会将输出写入缓冲区。myprintf本质上会使用 vsprintf 将输出放入 char 缓冲区,然后再放入您的内存缓冲区。 -
假设您的输出不会变得太大,您可以使用 setvbuf() 启用完全缓冲到保证足够大以容纳所有输出的缓冲区。确保永远不要调用 fflush()。不过,您可能会遇到实现定义的最大缓冲区大小。