gpt4 book ai didi

对 stdin、stdout 和 stderr 的工作方式感到困惑

转载 作者:太空宇宙 更新时间:2023-11-04 05:42:01 26 4
gpt4 key购买 nike

我有下面的程序,

void Print()
{
printf("\nCall from Print\n");
}

int main()
{
FILE * pFile;
char mystring [100];

pFile = freopen ("myfile.txt" , "r", stdin);
if (pFile == NULL)
{
perror ("Error opening file");
}
else
{
if ( fgets (mystring , 100 , pFile) != NULL )
{
freopen("myfile.txt" , "a", stdout);
Print();
printf("Here it is\n");
//puts (mystring);
}
fclose(stdout);
fclose (pFile);

}
printf("Hello World\n");
return 0;
}

现在,当我执行程序时,我无法在控制台窗口中看到输出。所有输出都重定向到 myfile.txt 文件中。我希望输出也应该出现在 consolemyfile.txt 中。

毕竟 printf("Hello World\n") 没有在控制台中打印出来。如何让它也打印在控制台中?

我正在使用 windows-7,visual studio-2010

最佳答案

freopen("myfile.txt" , "a", stdout);

将使您的stdout输出到文件myfile.txt此函数会将控制台的输出重定向到文件 myfile.txt

即使您使用 fclose(stdout);,这也不会将 stdout 的输出返回到控制台,它只会关闭 myfile.txt

更多详情请引用以下链接Strange behaviour when redirecting stdout in C

为了同时在控制台和文件中获得输出,您必须保持标准输出不变,不要使用 freaopen() 重新打开它,也不要关闭它。并且您必须在文件和标准输出中打印两次消息

关于对 stdin、stdout 和 stderr 的工作方式感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15808664/

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