我目前正在用C++编写一个套接字程序,并且在尝试写入控制台(一个必需的任务)时出于某种原因偶然发现了非常奇怪的行为。奇怪的标准输出行为
cout << themsg[0] << themsg[1] << endl;
cout << "Phase 3: Supernode sent the message " << themsg[0] << " on dynamic port number " << themsg[1] << endl;
themsg [0]是字符串“User#2:What's up 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?
我知道msg [0]和msg [1]是正确的,因为我将它们的值写入文件进行验证。肯定会有一些奇怪的stdout问题。
对于第一行,它显示themsg [1]的5个字符覆盖了msg [0]的前五个字符。对于第二行,似乎忽略了cout的前两个参数,然后添加了一个消息片段。
如果有人能帮忙,我会很感激。我尝试使用flush()但无济于事。我不确定输出缓冲区是如何工作的,所以我真的很迷茫。
代码是多线程的吗? –
显示一些代码,包括'themsg'数组的初始化。 –
问题已解决。该字符串附加了/ r虚拟回车符。哎呀! – aaronmar