繁体   English   中英

Windows出现意外行为

[英]Windows fread unexpected behavior

因此,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不能像我期望的那样工作?

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

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

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

使用fread(buffer, fileSize, 1, file); 您正在读取一个大小为fileSize项目(成功读取fread则返回1),而使用fread(buffer, 1, fileSize, file); 您正在读取大小为1的fileSize项,它将返回读取的字节数(如您所期望的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM