将stdout指向文件fp后,对stdout输出就是输出到文件,但是遇到'\n'会出现异常情况。

时间:2020-12-14 19:33:44

#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

#2


标准已经说了,你不能自己设置,你需要使用freopen去设置,重写向可能还需修改一些参数,你自己直接赋值行为是未定义的

http://en.cppreference.com/w/c/io

Once set, the orientation can only be changed with freopen.

#1


验证了一下,确实会有这个问题
看了一下,出问题的是输出的普通字符串,需要格式化的输出就没问题
这个可能是内部实现机制的问题吧
以前从来没看过有用stdout=fp这样的用法
想完成这样的事情一般有两种做法,一个是fprintf(fp,.......
还有一个是用freopen

#2


标准已经说了,你不能自己设置,你需要使用freopen去设置,重写向可能还需修改一些参数,你自己直接赋值行为是未定义的

http://en.cppreference.com/w/c/io

Once set, the orientation can only be changed with freopen.