鉴于以下功能:
freopen("file.txt","w",stdout);
Run Code Online (Sandbox Code Playgroud)
将stdout重定向到一个文件,如何将它重新定向到控制台?
我会注意到,是的还有其他类似的问题,但它们是关于linux/posix的.我正在使用Windows.
您无法分配给stdout,这会使依赖它的一组解决方案无效.dup和dup2()不是Windows的原生,使另一组无效.如上所述,posix函数不适用(除非你计算fdopen()).
Has*_*kun 17
你应该可以_dup
用来做这件事
这样的东西应该工作(或者您可能更喜欢_dup
文档中列出的示例):
#include <io.h>
#include <stdio.h>
...
{
int stdout_dupfd;
FILE *temp_out;
/* duplicate stdout */
stdout_dupfd = _dup(1);
temp_out = fopen("file.txt", "w");
/* replace stdout with our output fd */
_dup2(_fileno(temp_out), 1);
/* output something... */
printf("Woot!\n");
/* flush output so it goes to our file */
fflush(stdout);
fclose(temp_out);
/* Now restore stdout */
_dup2(stdout_dupfd, 1);
_close(stdout_dupfd);
}
Run Code Online (Sandbox Code Playgroud)
小智 15
另一种解决方案是:
freopen("CON","w",stdout);
Run Code Online (Sandbox Code Playgroud)
每个维基百科 "CON"是一个特殊的关键字,指的是控制台.