繁体   English   中英

C++ istream::read

[英]C++ istream::read

为什么这个 function 读取文件错误? 在读取最后一个符号后的 buff 中包含垃圾值。 它与 memory alignment 有关吗? 我知道更安全的 std::string 和 rdbuff(),但我想了解 C 风格的字符串是如何工作的。

char * read_from_file(const char * path)
{
    std::ifstream fin(path);
    if (fin)
    {        
        fin.seekg(0, fin.end);
        size_t length = fin.tellg();
        fin.seekg(0, fin.beg);       
        
        char * buff = new char[length];
        fin.read(buff, length);
        
        std::cout << buff << "\n";

        fin.close();
        return buff;
    }
    return nullptr;
}

例如:

文件:

#version 330 core

out vec4 FragColor;

void main()
{
    FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);
}

浅黄色:

#version 330 core

out vec4 FragColor;

void main()
{
    FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);
}

isample_blit_scaled  <-- garbage

您需要在字符串中添加一个 null 终止符。

char * read_from_file(const char * path)
{
    std::ifstream fin(path);
    if (fin)
    {        
        fin.seekg(0, fin.end);
        size_t length = fin.tellg();
        fin.seekg(0, fin.beg);       
        
        char * buff = new char[length+1]; // allow room for terminator
        fin.read(buff, length);
        buff[length] = '\0'; // add terminator
        
        std::cout << buff << "\n";

        fin.close();
        return buff;
    }
    return nullptr;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM