gpt4 book ai didi

ubuntu - 这是 g++ 4.7.2 中 cout 和 getline 的错误吗?

转载 作者:行者123 更新时间:2023-12-04 05:24:37 24 4
gpt4 key购买 nike

2012/11/13 更新:
我发现我的问题已经被问到了。
这是处理不同行尾文本文件的一个很好的解决方案:
Getting std :: ifstream to handle LF, CR, and CRLF?

是否有可能为 libstdc++ 做出贡献?如何?

2012/11/11

我发现cout有问题。
如果 getline() 返回了两个字符串,
第二个字符串将覆盖输出中的第一个字符串。

这是示例代码:

#include<iostream>
#include<fstream>
using namespace std;

int main()
{
//normal code
cout << "Normal result:" << endl;
string str1 = "hello";
cout << str1;
str1 = "123";
cout << str1;

cout << endl;

//broken code
cout << "Bug?" << endl;
ifstream fin;
fin.open("test.dat");

string str;

getline(fin, str);
cout << str;

getline(fin, str);
cout << str;

fin.close();
return 0;
}

这是输入文件(test.dat):
hello
123

输出将是:
Normal result:
hello123
Bug?
123lo

我正在使用 ubuntu 12.10 64 位,
编译器的版本是
g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2。
有什么建议吗?
有没有人告诉我在哪里提交错误?

最佳答案

与 libstdc++ 中的错误(可能发生,以及 gcc 中的错误,但现在相当少见)相比,输入文件中的行终止不正确 - 很可能是使用 DOS/Windows CR+LF行尾,其中 - 作为 getline()丢弃 LF - 导致第二个字符串覆盖第一个字符串。如果您通过某种十六进制转储器运行程序的输出,您可以很容易地看到这一点,例如xxd .

要么检查 \r在您阅读的字符串的末尾(顺便说一句,MacOS 到版本 9 仅将其用作 EOL 标记),修复您的输入,或在打印时适本地在输出中添加换行符。

关于ubuntu - 这是 g++ 4.7.2 中 cout 和 getline 的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13336523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com