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 に答える