我在Ubuntu上编译了一个为Windows开发(并在其上工作)的程序。在Ubuntu上,我看到了这段代码:
string s = values_[9];
cout << s << endl;
cout << s << "x\n";
产生这个输出:
high
xigh
第二行的预期输出为“highx”。我知道values_ [9]的值最初是从文件中读取的(在Windows上编写)。打印其他字符串似乎正常工作。
这里发生了什么?
答案 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]
。