【发布时间】:2011-11-24 11:00:10
【问题描述】:
我目前正在用 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 阶段:超级节点在动态端口号 39416 上发送消息 User#2:What's up Dick?”
控制台输出如下:
394162:What's up Dick?
on dynamic port number 39416essage User#2:What's up Dick?
我知道themsg[0] 和themsg[1] 是正确的,因为我将它们的值写入文件以进行验证。这肯定是一些奇怪的标准输出问题。
对于第一行,themsg[1] 的 5 个字符似乎覆盖了 themsg[0] 的前五个字符。对于第二行,似乎忽略了 cout 的前两个参数,然后附加了一个消息片段。
如果有人可以提供帮助,我将不胜感激。我尝试使用 flush() 但无济于事。我不太确定输出缓冲区是如何工作的,所以我真的很迷茫。
【问题讨论】:
-
显示一些代码,包括
themsg数组的初始化。 -
问题已解决。该字符串附加了 /r 虚拟回车符。哎呀!
标签: c++ buffer stdout std cout