為什麼 printf 印不出東西來?
一個簡簡單單的問題,隨手做個紀錄。下面這個小程式毫無意義可言,簡單來說就是印出 Hello World 以後進入無窮迴圈。 #include #include int main() { printf( "Hello World!!" ); while(1) { } return 0; } 問題來了,這個 printf 並沒有印出來 Hello World。可是把程式改成下面這個樣子就沒問題了。 #include #include int main() { printf( "Hello World!!\n" ); while(1) { } return 0; } 這是什麼原因呢?因為 printf 其實只是把東西放到 buffer 當中而不會立刻顯示。buffer 有三種模式,分別是 unbuffered , block buffered , line buffered 。 而預設的 stdout 是 line buffered ,所以只有當遇到 '\n' 才會清空 buffer 把內容印出來,而 stderr 預設就是 unbuffered 。要確保內容一定印的出來的方法,可以使用 fflush( stdout ),或是乾脆直接輸入下面的函式: setbuf( stdout, NULL );