这是我从另一个被搁置的问题中复制的问题。我想知道为什么当我连接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
但我仍然不知道为什么会这样。为什么回车后跟一个行结束导致这种行为?