1

我的代码是:

#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]$

似乎 system("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

可以正常使用,为什么?

4

2 回答 2

2

printf调用仅将输出放在缓冲区中。为了实际写入缓冲区,它需要被刷新。当你打印一个换行符时,输出会自动刷新,所以如果你用这个替换格式字符串printf"%s\n"它应该可以在没有调用的情况下工作fflush

于 2011-10-31T09:43:09.573 回答
1

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

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

问题是标准输出默认是行缓冲的。

看:

于 2011-10-31T09:56:12.303 回答