奇怪的cout行为

时间:2011-08-10 20:49:01

标签: c++ cout

我在Ubuntu上编译了一个为Windows开发(并在其上工作)的程序。在Ubuntu上,我看到了这段代码:

string s = values_[9];
cout << s << endl;
cout << s << "x\n";

产生这个输出:

high
xigh

第二行的预期输出为“highx”。我知道values_ [9]的值最初是从文件中读取的(在Windows上编写)。打印其他字符串似乎正常工作。

这里发生了什么?

3 个答案:

答案 0 :(得分:8)

运行命令,其输出通过cat -A传送。可能s的值或endl产生的输出给你一个'\r'字符,通常会将光标发送回行的开头。

编辑:进一步考虑,流浪'\r'几乎肯定在s,而不是endl产生的输出。我原本以为可能会有一些有趣的语言环境,但s等于"high\r"会解释症状。

EDIT2:如果您的系统没有cat -A(它是GNU扩展名),请尝试cat -v,或者,如果您绝望,请od -c

答案 1 :(得分:4)

您正在打印的字符串中包含回车符'\r'。发生的事情是你正在打印high,然后是回车,它将光标放回到行的开头。然后,当您打印x时,它会覆盖该行的第一个字母。

您应该从源文件中删除回车符(例如,使用dos2unix(1)或许多其他选项),或者在读取文件后更改代码以去除回车符。

答案 2 :(得分:3)

可能发生的事情是\r中有values_[9]