1

我有以下代码,

#include<stdio.h>
#include<stdlib.h>

int main()
{
    //freopen("file1","w",stdout);
    char str[]="command line with file";
    char s[]="extra string";
    puts(str);
    puts(s);
    system("PAUSE");    
    return 0;
}

当我在控制台上看到输出时,它显示给我,

command line with file
extra string
Press any key to continue . . . 

通过删除代码中的注释行,我希望在将输出写入文件时得到相同的输出。但它输出像,

Press any key to continue . . . 
command line with file
extra string

为什么文件和控制台输出之间有这种区别???这里 system("PAUSE") 函数负责字符串输出Press any key to continue . . .

4

1 回答 1

6

写入终端时,stdout是行缓冲的。它立即写入每一行。写入文件时,它是块缓冲的。它在缓冲区中存储几千字节,并在您调用fflush、缓冲区已满或程序结束时将它们刷新。暂停消息正在由一个单独的进程写入,该进程在原始进程之前退出,此时它必须刷新其缓冲区(如果有的话)。然后你的原始进程system()结束,它到达结束main()并退出,刷新包含你的两个测试字符串的缓冲区。

于 2012-07-02T10:28:30.160 回答