因此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函数读取来自输入流的大小字节的项目,并将它们存储在缓冲区中。”我将其解释为意味着任何一段代码都应该读取相同数量的数据。有谁知道为什么恐惧不像我期望的那样工作?
答案 0 :(得分:2)
他们确实读取了相同数量的数据。读取的字节数是size
参数乘以count
参数。返回的是读取的项目数。
所以在第一种情况下你要求1个大小为fileSize的项目,它返回1。 在第二种情况下,您要求提供大小为1的fileSize项,并返回fileSize。
答案 1 :(得分:1)
fread
返回“实际读取的完整项目数”,而不是读取的字节数。
使用fread(buffer, fileSize, 1, file);
,您正在阅读一个大小为fileSize
的项目(fread
因此会在成功时返回1)而使用fread(buffer, 1, fileSize, file);
则您正在阅读{{1}大小为1的项目,它将返回读取的字节数(正如您所期望的那样)。