回车导致cout覆盖字符并无序打印

时间:2016-12-01 21:05:32

标签: c++ cout

这是我从另一个被搁置的问题中复制的问题。我想知道为什么当我连接cout中的多个字符串时,为什么它会在那里覆盖一个字符时,将额外的连字符添加到输出缓冲区流的开头?

下面是一个最小的例子,展示了如何打印任何字符串会导致这种情况发生。我之前发布过这个问题,但由于缺乏可重复性而暂停了。它不可复制的原因是因为当我复制文本文件时,我没有复制隐藏的字符。事实证明,当我cat -e ex.txt时,由于某种原因,这些行都以^M结尾。这是问题的原因。在下面回答。

-Paul

#include <string>
#include <fstream>
#include <iostream>

using namespace std;
int main(int argc, char* argv[]){
    ifstream infile(argv[1]);
    string str;
    getline(infile, str);
    cout<<"str: "<<str<<"-"<<endl;
}

我用以下代码编译并运行代码:

g++ -o hw4.exe prog4.cpp

./hw4.exe ex2.txt

$ cat -e ex2.txt
Bella Abzug ^M$

以下是

的输出
od -x ex2.txt

0000000 6542 6c6c 2061 6241 757a 2067 0a0d
0000016

输出:

-tr: Bella Abzug

但我仍然不知道为什么会这样。为什么回车后跟一个行结束导致这种行为?

1 个答案:

答案 0 :(得分:0)

https://en.wikipedia.org/wiki/Control_character

^ M是carriage return,即“将光标移动到行首”