有什么区别:
fread( buf, sizeof buf, 1, file ); // 'file' is valid open 'FILE *'
和
fread( buf, 1, sizeof buf, file );
参数2和3是size_t size, size_t nmemb
,描述为“fread()读取nmemb数据项,每个字节长度为”。我认为读取的最终字节数必须是size * nmemb
,但由于某种原因,只有第二种语法(大小= 1)对我有效。
区别在于以下两点:
nmemb
)。如果它们成功,这在你的两个陈述中是不同的。fread( buf, sizeof(buf), 1, file )
你会得到全部或全部;如果文件较小,fread
无法读取小于sizeof(buf)
的内容。
在第二种情况:
fread( buf, 1, sizeof(buf), file );
您允许fread
尽可能多地读取字节数,即使文件中的sizeof(buf)
小于How to set/get unsigned char * to and from std::shared_ptr<uint8_t>?也是如此。将返回实际读取的元素数(本例中为字节数)。第二个参数指定要读取的元素的大小。第三个参数指定要读取的元素数。
所以在第一种情况下,你想要读取size = sizeof(buf)的1个元素。
在第二种情况下,您希望读取sizeof(buf)元素的数量,其中每个元素是1个字节。第二个可用于读取整个文件的内容,如此qazxswpoi问题。