考虑以下几点:为什么睡眠()块的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