2011-10-31 60 views
1

我的代碼是:屏幕打印令人困惑?

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

的輸出是:

[[email protected] studio]$ ./a.out 
/home/river/Desktop/studio 
./a.out[[email protected] studio]$ 

似乎系統( 「PWD」)打印第一,然後打印的argv [0]。爲什麼? 如果我添加如下語句如下:

#include <stdio.h> 

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

輸出是:

[[email protected] studio]$ ./a.out 
./a.out/home/river/Desktop/studio 

它正常工作,爲什麼?

回答

2

printf調用只將輸出放入緩衝區。對於實際寫入的緩衝區,它需要刷新。打印換行符時輸出會自動刷新,因此如果用"%s\n"替換printf中的格式字符串,它應該可以在沒有調用fflush的情況下使用。

+1

...並調用 「系統」 不刷新輸出流,甚至使用輸出流 - 中由「系統」調用的命令直接寫入並立即寫入控制檯,然後在程序結束時刷新緩衝區,並顯示您輸入的行。 –

1

另一種方式來「修復」它:

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

的事情是,標準輸出是默認linebuffered。

參見:

  • 函數setbuf(),調用setvbuf()
  • stdbuf