使用fread()
时,我的文件未读到末尾,并且从stat()
返回了文件大小。
我检查过的手册:
这是我的代码:
FILE *file = fopen(path, "r");
if (file == NULL) {
printf("failed!\n");
return 0;
}
struct stat fileattribs;
size_t size;
if (stat(path, &fileattribs) < 0)
return 0;
size = fileattribs.st_size;
char *buff = (char *) malloc(sizeof(char) * (size + 1));
fread(buff, sizeof(char), size, file);
buff[size] = '\0';
这是我要读取的文件:
#version 330 core
out vec4 light_fragment_color;
uniform vec3 object_color;
uniform vec3 light_color;
void main(void) {
light_fragment_color = vec4(light_color * object_color, 1.0);
}
如果我在上面的代码中将size变量(例如,增加了5),则读取成功,但是发生了段错误(是的,这是一个愚蠢的主意...)。
如何使用stat()和fread()函数正确读取文件?
答案 0 :(得分:1)
只有一个想法:也许您的文件实际上被读到末尾,您只是看不到它。因为如果您的文件包含二进制零,则此一个将用作字符串终止符,而不是您的一个。 (因为缓冲区中的第一个二进制零总是标记字符串的结尾。)