aar*_*mar 1 c++ buffer cout stdout std
我目前正在用C++编写一个套接字程序,由于某种原因,我在尝试写入控制台(一项必需的任务)时遇到了非常奇怪的行为.
cout << themsg[0] << themsg[1] << endl;
cout << "Phase 3: Supernode sent the message " << themsg[0] << " on dynamic port number " << themsg[1] << endl;
Run Code Online (Sandbox Code Playgroud)
themsg [0]是字符串"User#2:Dick是什么?"
themsg [1]是字符串"39416"
第一行应写"用户#2:怎么了迪克?" 到控制台,然后是"39416".
第二行应打印"第3阶段:超级节点发送消息用户#2:怎么了迪克?动态端口号39416"
控制台输出如下所示:
394162:What's up Dick?
on dynamic port number 39416essage User#2:What's up Dick?
Run Code Online (Sandbox Code Playgroud)
我知道themsg [0]和themsg [1]是正确的,因为我将它们的值写入文件进行验证.它肯定是一些奇怪的stdout问题.
对于第一行,出现themsg [1]的5个字符会覆盖themsg [0]的前五个字符.对于第二行,似乎忽略了cout的前两个参数,然后附加了一个消息片段.
如果有人可以提供帮助,我会非常感激.我尝试使用flush()但无济于事.我不确定输出缓冲区是如何工作的,所以我真的迷失了.
您可能\r在末尾有一个回车符号themsg[0].我可以在Linux上使用以下程序重现该行为:
int main()
{
std::cout << "User#2: what's up?\r" << "39416" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
的\r,不跟时\n,具有返回虚拟"的效果马车终端到行的开头的",所以接下来的打印将会覆盖哪些已经在那里了.但是,您不会在文件中看到这一点,因为该文件只包含两个字符串,包括CR.
剥离\r前打印.