考慮以下幾點:爲什麼睡眠()塊的std :: ostream的
const char opn[8] = { 0x16, 'O', 'P', 'N', 0x17, 0xa8, 0xa9, '\0' };
std::cout << opn;
sleep(5);
串只會五秒後寫入cout
。預期的行爲是打印郵件到cout
,然後等待幾秒鐘。
爲什麼會發生這種情況?
考慮以下幾點:爲什麼睡眠()塊的std :: ostream的
const char opn[8] = { 0x16, 'O', 'P', 'N', 0x17, 0xa8, 0xa9, '\0' };
std::cout << opn;
sleep(5);
串只會五秒後寫入cout
。預期的行爲是打印郵件到cout
,然後等待幾秒鐘。
爲什麼會發生這種情況?
std::cout
默認被緩存,因此消息不會立即打印,而只會在std::cout
的緩衝區被刷新時(即程序終止時)。
使用
std::cout << opn << std::flush;
由於@RemyLebeau在評論這個回答說:<< std::endl
相當於<< '\n' << std::flush;
,並刷新緩衝區。
此外,你缺少尾隨空字節,所以你的程序仍然是不確定的。
'std :: cout << opn << std :: endl'也會刷新緩衝區(輸出換行符後)。 –
@RemyLebeau好的,但這對OP有何幫助?如果他想要一個尾隨的換行符,他會說我想。 – Downvoter
只需說明關於沖洗的額外事實。並不是每個人都明白std :: endl會執行flush,很多人認爲它只是''n''的別名,並且可以互換使用。 –
我預測結果會改變,如果你在睡覺前寫'cout.flush()' –
首先,你的\ 0在哪裏?其次,線路緩衝可能是一個因素,但首先擺脫UB。 – deviantfan