gpt4 book ai didi

c - 使用 fread 函数 : size to be read is greater than available for reading

转载 作者:太空狗 更新时间:2023-10-29 15:55:42 28 4
gpt4 key购买 nike

我有一个问题:

我正在使用 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 through 是如何读取文件的吗?

Edi1:确切地说,如果除法不准确,当我读取最后一点较小的文件大小时,我将读取不在文件中的内容,我想知道我的 vector 大小是否调整为我想要的字节数可以更好地阅读或发展动态。

最佳答案

fread返回它读取的记录数。缓冲区中超出此范围的任何内容都可能被破坏,不要依赖该数据。

fread returns the number of full items actually read, which may be less than count if an error occurs or if the end of the file is encountered before reaching count.

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

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

关于c - 使用 fread 函数 : size to be read is greater than available for reading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10705158/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com