读取文本文件会导致缓冲区结束无效字符

时间:2015-04-16 16:00:05

标签: c++ file ifstream eof

在c ++中读取一个简单的文本文件会在缓冲区末尾显示无效字符

    string filecontent="";
    ifstream reader(fileName);
    reader.seekg (0, reader.end);``
    int length = reader.tellg();
    reader.seekg (0, reader.beg);
    char *buffer=new char[length];
    reader.read(buffer,length);
    filecontent=buffer;
    reader.close();
    cout<<"File Contents"<<std::endl;
    cout<<filecontent;
    delete buffer;
    return false;

但是当我指定缓冲区长度增加1时,即

char *buffer=new char[length+1];
    reader.read(buffer,length+1);

没有无效字符就可以正常工作我想知道这背后的原因是什么?

1 个答案:

答案 0 :(得分:3)

您读取字符串时不会使用尾随零(char(0)或&#39; \ 0&#39;)来终止它。将缓冲区长度增加1并在buffer[reader.tellg()]处存储零。只是增加缓冲区大小是不够的,你可能偶然得到一个尾随零。