尝试理解fread

问题描述 投票:0回答:1

我有一个数据文件。

#version 460 core
out vec4 FragColor;

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

我正在尝试用恐惧来阅读它的内容。

    FILE *fshader;
    char *fbuffer;
    long fsize;

    fshader = fopen("src/graphics/_fragment.shader", "r");

    fseek(fshader, 0L, SEEK_END); 
    fsize = ftell(fshader); 
    rewind(fshader);

    fbuffer = (char *)malloc(fsize + 1);
    fread(fbuffer, 1, fsize, fshader); 
    fbuffer[fsize] = '\0';

但我不明白 fread 是如何工作的。 它总是多读 6 个字符。

#version 460 core
out vec4 FragColor;

void main()
{
    FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);
}_to_te
c fread
1个回答
0
投票

我的猜测是,您使用的是 Microsoft Windows,并且文本文件具有

\r\n
行结尾。

在文件末尾时,

ftell
将为您提供文件的长度(以字节为单位),即使在文本模式下也是如此。然而,在文本模式下,当读取字符组合
\r\n
时,它会被翻译为
\n
。这意味着就
fread
而言,您的文件长度比
ftell
报告的长度短几个字节。

因此,您应该根据

fread
读取的字节数,通过检查
fread
的返回值来设置终止空字符的位置。您不应该根据
ftell
报告的内容进行设置。

© www.soinside.com 2019 - 2024. All rights reserved.