gpt4 book ai didi

c++ - Ifstream读取无用数据

转载 作者:行者123 更新时间:2023-11-28 02:59:33 30 4
gpt4 key购买 nike

我正在使用 C++ 分块读取文件。该文件包含整数,每行两个。

首先,我用它来查找文件的长度:

input.seekg (0, input.end);
int length = input.tellg();
input.seekg (0, input.beg);

之后,我检查length是否大于chunksize,如果是这样,我为 block 分配内存...

char * buffer = new char [chunksize];

好的,阅读功能来了...

while (true)
{
input.read (buffer,chunksize);
cout<<buffer;
if(input.eof()) break;
}

紧接着我 delete [] buffer;

但是,我在使用这段代码时遇到了问题。例如,当输入文件是这样的:

2 5 
4 5
6 8
7 5
4 2
1 2

程序不会输出预期的字符,而是类似:

2 5 
4 5
6 8
7 5
4 2
1 2 2
1 2

你知道这些额外字符的原因吗?如果文件的大小小于 chunksize,我input.read 使用它的长度,它工作得很好。也许如果使用长度大于文件大小的 read 会使它无法正常工作?

非常感谢

最佳答案

您的字符串不是以 NULL 结尾的。 read() 函数不会在它为您读取的内容末尾放置一个 '\0',因此当您打印它时,您实际上是在打印超出阅读内容末尾的垃圾数据,因为打印代码需要一个 NULL 终止符来标记字符串的结尾。

关于c++ - Ifstream读取无用数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21188165/

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