C++ 奇怪的行为

C++ 奇怪的行为,c++,cout,C++,Cout,我在Ubuntu上编译了一个为Windows开发的程序。在Ubuntu上,我看到以下代码: string s = values_[9]; cout << s << endl; cout << s << "x\n"; 第二行的预期输出为“highx”。我知道values_9的值最初是从一个文件(写在Windows上)读取的。打印其他字符串似乎工作正常 这里发生了什么?可能发生的情况是,值[9]中有一个\r,运行命令,其输出通过cat-a管道传输。可

我在Ubuntu上编译了一个为Windows开发的程序。在Ubuntu上,我看到以下代码:

string s = values_[9];
cout << s << endl;
cout << s << "x\n";
第二行的预期输出为“highx”。我知道values_9的值最初是从一个文件(写在Windows上)读取的。打印其他字符串似乎工作正常


这里发生了什么?

可能发生的情况是,
值[9]
中有一个
\r
运行命令,其输出通过
cat-a
管道传输。可能是
s
的值,或者是
endl
产生的输出为您提供了一个
'\r'
字符,该字符通常将光标发送回行的开头

编辑:进一步考虑,杂散的
'\r'
几乎肯定在
s
中,而不是在
endl
生成的输出中。我原以为可能会发生一些有趣的语言环境问题,但让
s
等于
“high\r”
可以解释这些症状


EDIT2:如果您的系统没有
cat-A
(它是GNU扩展),请尝试
cat-v
,或者,如果您非常绝望,
od-c
您正在打印的字符串中有一个回车符
'\r'
。所发生的情况是,您正在打印
high
,然后回车,这会将光标放回行的开头。然后,当您打印
x
时,它会覆盖行中的第一个字母


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

+1(添加“但不在Windows上,因此观察结果不同。”)实际上,
\r'
会将光标发送到Windows上的行的开头(我想这取决于您编写它的位置,但它在
cmd
窗口中是这样工作的)。区别在于Windows在文本文件中使用“\r\n”作为行终止符,而Unix使用
”\n
。性能良好的软件可能不会在任何一个系统上生成孤立的
'\r'
字符。好的,但根据输出,有一个孤立的
\r
(否则
x
将独立运行)。正如我所说,“性能良好的软件”和“可能”.8-)好的,但这显然不是“性能良好的软件”因此,不同的观察结果一定是由于其他原因造成的!:)
high
xigh