繁体   English   中英

奇怪的行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM