2015-12-31 72 views
0

考慮以下幾點:爲什麼睡眠()塊的std :: ostream的

const char opn[8] = { 0x16, 'O', 'P', 'N', 0x17, 0xa8, 0xa9, '\0' }; 
std::cout << opn; 
sleep(5); 

串只會五秒後寫入cout。預期的行爲是打印郵件到cout,然後等待幾秒鐘。

爲什麼會發生這種情況?

+5

我預測結果會改變,如果你在睡覺前寫'cout.flush()' –

+0

首先,你的\ 0在哪裏?其次,線路緩衝可能是一個因素,但首先擺脫UB。 – deviantfan

回答

4

std::cout默認被緩存,因此消息不會立即打印,而只會在std::cout的緩衝區被刷新時(即程序終止時)。

使用

std::cout << opn << std::flush; 

由於@RemyLebeau在評論這個回答說:<< std::endl相當於<< '\n' << std::flush;,並刷新緩衝區。


此外,你缺少尾隨空字節,所以你的程序仍然是不確定的。

+0

'std :: cout << opn << std :: endl'也會刷新緩衝區(輸出換行符後)。 –

+0

@RemyLebeau好的,但這對OP有何幫助?如果他想要一個尾隨的換行符,他會說我想。 – Downvoter

+2

只需說明關於沖洗的額外事實。並不是每個人都明白std :: endl會執行flush,很多人認爲它只是''n''的別名,並且可以互換使用。 –

相關問題