我有一个数据文件。
#version 460 core
out vec4 FragColor;
void main()
{
FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);
}
我正在尝试用 fread 读取其中的内容。
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
行尾。在 Microsoft Windows 上,在文本模式下读取字符组合时
\r\n
,它将被转换为\n
。但是,当位于文件末尾时,ftell
即使在文本模式下,也会以未翻译的字节数给出文件的长度。这意味着就 而言fread
,您的文件长度比 报告的长度短几个字节ftell
。因此,您应该根据 读取的字节数
fread
,通过检查 的返回值来设置终止空字符的位置fread
。您不应该根据ftell
报告的内容来设置它。有两种可能的解决方案:
\r
字符):\r
字符):