
[英]Unexpected behavior of GetTokenInformation on Windows XP 64-bit
[英]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.