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