使用fread功能:要读取的大小大于可读取的大小

Ric*_*ard 3 c fread file-pointer

我有个问题:

我正在使用fread来读取文件.

typedef struct {
    int ID1;
    int ID2;
    char string[256];
} Reg;

Reg *A = (Reg*) malloc(sizeof(Reg)*size);

size = FILESIZE/sizeof(Reg);

fread (A, sizeof(Reg), size, FILEREAD);
Run Code Online (Sandbox Code Playgroud)

使用循环,连续调用此调用,让我读取整个文件.

当我接近文件的末尾会发生什么,我无法读取"size"*sizeof(Reg),或者如果你只能读取这个数量的一半,那么我的数组A会发生什么.它会是完成?该函数将返回错误?

知道如何通过fread读取文件?

Edi1:确切地说,如果除法不精确的话,当我读到最后一点较小的文件大小时,我将读取未存档的内容,我想知道我的向量调整大小为我可以读取的字节数,或者发展更好的动态.

Ste*_*end 8

fread返回它读取的记录数.缓冲区之外的任何内容都可能被破坏,不依赖于该数据.

fread返回实际读取的完整项目的数量,如果发生错误或者在到达计数之前遇到文件末尾,则可能小于计数.

该函数不会读取超过文件末尾的内容:最有可能的情况是,您将获得一堆完整缓冲区,然后读取(最终)部分缓冲区,除非文件大小是缓冲区长度的精确倍数.

您的逻辑需要适应这一点 - 文件大小为您提供了预期的记录总数,因此不应该忽略缓冲区中的尾随数据(在最终fread调用之后)与未初始化的记录相对应."剩余阅读记录"计数器将是一种方法.