ifstream::eof()
有bug。如果有一个文件
test.txt
,文件内容是:1
2
3
41 a
2 ab
3 abc(注意,最后有一个空行)
则,当时用下面的代码时,会有问题。
1
2
3
4
5
6
7
8
9
10int main() {
ifstream in("test.txt");
while (!in.eof()) {
int length;
in >> length;
char tmp[length + 1];
in.read(tmp, length);
cout << tmp << endl;
}
}原因在于,第三行读取完成后,不管是否将最后的换行符进行了消除,
eof()
会仍然返回false,因为只有当读到最后一个字符并尝试继续读的时候,该函数才会返回true。
原文作者:LULU
原文链接:https://lulu010722.com/cse-lab2a%E8%B8%A9%E5%9D%91/
发表日期:October 29th 2022, 7:29:21 pm
更新日期:July 1st 2023, 7:21:02 pm
版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可
-
Next Post泉さんとの相談
-
Previous Postgit——人类好朋友