我正在使用C ++以块的形式读取文件。 该文件包含整数,每行两个。
首先,我使用它来查找文件的长度:
input.seekg (0, input.end);
int length = input.tellg();
input.seekg (0, input.beg);
之后,我检查长度是否大于 chunksize ,如果这是真的,我会为块分配内存...
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 使用其长度,它可以正常工作。也许如果使用长度大于文件大小的读取会使其无法正常工作?
非常感谢
答案 0 :(得分:2)
您的字符串不是以NULL结尾的。 read()
函数不会将'\0'
放在它为您读取的内容的末尾,因此当您打印它时,您打印的垃圾数据超出了您阅读的结尾,因为打印代码期望一个NULL终止符来标记字符串的结尾。