我有以下代码,
#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 . . .
答案 0 :(得分:6)
写入终端时,stdout
是行缓冲的。它立即写入每一行。写入文件时,它是块缓冲的。它在缓冲区中存储几千字节,并在调用fflush
时或缓冲区已满或程序结束时将其刷新。暂停消息由一个单独的进程写入,该进程在原始进程之前退出,此时它必须刷新其缓冲区(如果有的话)。然后原始进程的system()
结束,它到达main()
的末尾并退出,刷新包含两个测试字符串的缓冲区。