Ifstream读取无用数据

时间:2014-01-17 14:25:33

标签: c++ arrays char fstream

我正在使用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 使用其长度,它可以正常工作。也许如果使用长度大于文件大小的读取会使其无法正常工作?

非常感谢

1 个答案:

答案 0 :(得分:2)

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