0

所以 fread 在 Win7 x64 上的行为出乎意料。

file = fopen(path, "rb");
fseek(file, 0, SEEK_END);
fileSize = ftell(file);
fseek(file, 0, SEEK_SET);
buffer = malloc(fileSize);
length = fread(buffer, fileSize, 1, file);

fread 将返回 1 个字节作为被读取而 (ferror 和 feof 都返回 0)

length = fread(buffer, 1, fileSize, file);

fread 将返回与 fileSize 读取的相同字节数。MSDN 说“fread 函数从输入流中读取最多 count 个大小字节的项目并将它们存储在缓冲区中。” 我将其解释为任何一段代码都应该读取相同数量的数据。有谁知道为什么 fread 没有像我期望的那样工作?

4

2 回答 2

2

他们确实读取了相同数量的数据。读取的字节数是size参数乘以count参数。返回的是读取的项目数。

因此,在第一种情况下,您要求 1 个大小为 fileSize 的项目,它返回 1。在第二种情况下,您要求提供大小为 1 的 fileSize 项目,它返回 fileSize。

于 2013-01-02T18:18:32.553 回答
1

fread返回“实际读取的完整项目数”,而不是读取的字节数。

fread(buffer, fileSize, 1, file);您正在读取一个大小的项目fileSizefread因此将在成功时返回 1),而当fread(buffer, 1, fileSize, file);您正在读取fileSize大小为 1 的项目时,它将返回读取的字节数(如您所料)。

于 2013-01-02T18:18:25.440 回答