屏幕打印令人困惑?

时间:2011-10-31 09:36:18

标签: c fflush

我的代码是:

#include <stdio.h>
void main( int argc, char** argv) {
    printf("%s", argv[0]);
    system("pwd");
}

输出结果为:

[river@localhost studio]$ ./a.out 
/home/river/Desktop/studio
./a.out[river@localhost studio]$

似乎首先打印系统(“pwd”),然后打印argv [0]。为什么? 如果我添加如下语句:

#include <stdio.h>

    void main( int argc, char** argv) {
        printf("%s", argv[0]);
        fflush(stdout);
        system("pwd");
    }

输出结果为:

[river@localhost studio]$ ./a.out 
./a.out/home/river/Desktop/studio

它正常工作,为什么?

2 个答案:

答案 0 :(得分:2)

printf调用仅将输出放在缓冲区中。要实际写入缓冲区,需要刷新。打印换行符时会自动刷新输出,因此如果您将printf中的格式字符串替换为:"%s\n",则无需调用fflush即可生效。

答案 1 :(得分:1)

“修复”它的另一种方式:

printf("%s\n", argv[0]);

问题是默认情况下stdout是linebuffered。

请参阅:

  • setbuf(),setvbuf()
  • stdbuf