[英]strange cout behaviour
我在 Ubuntu 上编译了一个为 Windows 开发(并适用于)的程序。 在 Ubuntu 上,我看到以下代码:
string s = values_[9];
cout << s << endl;
cout << s << "x\n";
生产这个 output:
high
xigh
第二行的预期 output 是“highx”。 我知道 values_[9] 的值最初是从文件中读取的(写在 Windows 上)。 打印其他字符串似乎工作正常。
这里发生了什么?
使用通过cat -A
管道传输的 output 运行命令。 可能s
的值或由endl
生成的 output 为您提供了一个'\r'
字符,这通常会将 cursor 发送回行首。
编辑:进一步考虑,流浪'\r'
几乎肯定在s
中,而不是在endl
生产的 output 中。 我原以为可能会发生一些有趣的语言环境,但是s
等于"high\r"
可以解释这些症状。
EDIT2:如果您的系统没有cat -A
(它是 GNU 扩展),请尝试cat -v
,或者,如果您很绝望,请尝试od -c
。
您正在打印的字符串中有一个回车符'\r'
。 发生的事情是您打印high
,然后是回车,这使 cursor 回到行首。 然后,当您打印x
时,它会覆盖该行的第一个字母。
您应该从源文件中删除回车符(例如使用dos2unix(1)
或许多其他选项),或者在读入文件后更改代码以去除回车符。
可能发生的事情是values_[9]
中有一个\r
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.