我有一个数据文件。
#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
我的猜测是,您使用的是 Microsoft Windows,并且文本文件具有
\r\n
行结尾。
在文件末尾时,
ftell
将为您提供文件的长度(以字节为单位),即使在文本模式下也是如此。然而,在文本模式下,当读取字符组合\r\n
时,它会被翻译为\n
。这意味着就 fread
而言,您的文件长度比 ftell
报告的长度短几个字节。
因此,您应该根据
fread
读取的字节数,通过检查fread
的返回值来设置终止空字符的位置。您不应该根据ftell
报告的内容进行设置。