#include<stdio.h>
int main()
{
FILE *fp;
fp=fopen("test.txt","w+");
printf("stdout->_fileno=%d\n",stdout->_fileno);
stdout=fp;
printf("stdout->_fileno=%d\n",stdout->_fileno);
printf("%d\n",__LINE__);
printf("sldjalfjasljfdlasjflasjf\n");
printf("hello\n");
}
如上代码所示,在屏幕打印完 stdout->_fileno=1 后,我将stdout指向了fp所指的文件,然后
printf("stdout->_fileno=%d\n",stdout->_fileno);
printf("%d\n",__LINE__);
这两行是写入到文件中去了,但是,
printf("%d\n",__LINE__);
printf("sldjalfjasljfdlasjflasjf\n");
这两行还是会打印在屏幕上。如果把这两行中控制格式输出字符串里的"\n"去掉,这两行的内容又会输出到文件中,请问如何解释这种现象?
2 个解决方案
#1
验证了一下,确实会有这个问题
看了一下,出问题的是输出的普通字符串,需要格式化的输出就没问题
这个可能是内部实现机制的问题吧
以前从来没看过有用stdout=fp这样的用法
想完成这样的事情一般有两种做法,一个是fprintf(fp,.......
还有一个是用freopen
看了一下,出问题的是输出的普通字符串,需要格式化的输出就没问题
这个可能是内部实现机制的问题吧
以前从来没看过有用stdout=fp这样的用法
想完成这样的事情一般有两种做法,一个是fprintf(fp,.......
还有一个是用freopen
#2
标准已经说了,你不能自己设置,你需要使用freopen去设置,重写向可能还需修改一些参数,你自己直接赋值行为是未定义的
http://en.cppreference.com/w/c/io
Once set, the orientation can only be changed with freopen.
http://en.cppreference.com/w/c/io
Once set, the orientation can only be changed with freopen.
#1
验证了一下,确实会有这个问题
看了一下,出问题的是输出的普通字符串,需要格式化的输出就没问题
这个可能是内部实现机制的问题吧
以前从来没看过有用stdout=fp这样的用法
想完成这样的事情一般有两种做法,一个是fprintf(fp,.......
还有一个是用freopen
看了一下,出问题的是输出的普通字符串,需要格式化的输出就没问题
这个可能是内部实现机制的问题吧
以前从来没看过有用stdout=fp这样的用法
想完成这样的事情一般有两种做法,一个是fprintf(fp,.......
还有一个是用freopen
#2
标准已经说了,你不能自己设置,你需要使用freopen去设置,重写向可能还需修改一些参数,你自己直接赋值行为是未定义的
http://en.cppreference.com/w/c/io
Once set, the orientation can only be changed with freopen.
http://en.cppreference.com/w/c/io
Once set, the orientation can only be changed with freopen.