这个c语言中,对于输入输出流的缓冲问题我是早就知道的。但是以前对输入流关注的较多,没想到今天因为输出流,害的师兄们找了一天,我也帮忙找了一下午才找出来。
师兄有个C语言程序,程序前面输出一堆东西(绝对没有错),后面很复杂,调试时出现了段错误(segment error)。
如果直接运行这个程序输出会显示出来,然后出现段错误。 但是一旦要重定向到一个文件里面,前面的输出就奇迹般地消失了 。
各种方法调试,包括在程序中输出到文件中,结果却发现可以,也就是说程序可以运行,但是前面的输出就是显示不出来。
(中间还有很多奇怪的地方,最后我们解决问题后回过来一看,原来是人家把输出放到了stderr上了)
富哥一直说既然printf在前面那就会先打出来。在我们没有用文件测试时,我也是这样认为的,但是现在富哥的这句话,让我不由地写了一个测试程序:
printf("-----111-----\n");
for(int i=0;i<100*10;i++) for(int j=0;j<100*10;j++) for(int n=0;n<100*10;n++);
printf("-----222-----");
stderr 无缓存直接输出。 stdin,stdout 都有缓存,对于stdin 应该经常遇到,如果多输入,则会给下次输入带来影响。stdout今天头一次遇到,我写出那个测试程序,以前也真的没想到这里。 c/c++ 果然是硬件类型的语言,不懂计算机原理,在错误的排除上会遇到困难。