c++ - 读取文本文件导致缓冲区末尾出现无效字符

标签 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);

它在没有无效字符的情况下工作正常我想知道这背后的原因是什么?

最佳答案

您读取的字符串没有以尾随零(char(0) 或 '\0')终止。将缓冲区长度增加一并在 buffer[reader.tellg()] 中存储一个零。仅仅增加缓冲区大小是不够的,您可能会不小心得到尾随零。

关于c++ - 读取文本文件导致缓冲区末尾出现无效字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29680117/

相关文章:

c++ - Winapi 创建标签菜单

c++ - Random.org 真正的随机 C++

android - 如何在 NativeUI C++ 基础结构中解析实际的 native UI 小部件?

javascript - 在 javascript 中从我的 Parse 数据库中获取图像?

javascript(jquery?)和运算符不工作

c++ - 我的二维数组没有读取我的文本文件并正确输出

c++ - 为什么这个 C++ 静态单例永远不会停止?

c++ - ifstream - 读取最后一个字符两次

c++ - 如何在 C++ 中对 ifstream 使用迭代器两次?

file - 什么时候文件不是文件系统对象?