我有个问题:

我正在使用 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);

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

当我接近文件末尾时会发生什么,并且我无法读取“size”* sizeof (Reg),或者如果您只能读取这个量的一半,那么我的数组 A 会发生什么。会完成吗?函数会返回错误吗?

知道 fread 是如何读取文件的吗?

埃迪1:确切地说,如果划分不准确,当我读取最后一点较小的文件大小时,我将读取文件中没有的内容,我想知道将矢量大小调整为我可以读取或开发的字节数动态更好。

有帮助吗?

解决方案

fread 返回它读取的记录数。在缓冲区中的任何内容都可能会被播放,不依赖于该数据。

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

功能不会读取文件的末尾:最可能发生的是,您将获得一堆完整的缓冲区,然后是(最终)部分缓冲区读取,除非文件大小是缓冲区的完全倍数长度。

您的逻辑需要容纳此项 - 文件大小为您提供了预期的记录总数,因此不应忽略与未初始化的记录对应的缓冲区中的尾随数据(在最终的fread呼叫之后)。留下读数柜台的“记录”是一种方法。

其他提示

fread() 返回它可以读取的元素数。所以你必须检查返回值 fread() 找出数组中有多少元素是有效的。

如果发生错误或发生错误,它将返回一个短项目计数或零 EOF 已经达到了。你将不得不使用 feof() 另一 ferror() 在这种情况下检查满足什么条件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top