fread()参数2和3

问题描述 投票:0回答:2

有什么区别:

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)对我有效。

c linux stdio
2个回答
5
投票

区别在于以下两点:

  1. 返回值是实际读取的元素数(零到nmemb)。如果它们成功,这在你的两个陈述中是不同的。
  2. 在第一种情况下: 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>?也是如此。将返回实际读取的元素数(本例中为字节数)。

0
投票

第二个参数指定要读取的元素的大小。第三个参数指定要读取的元素数。

所以在第一种情况下,你想要读取size = sizeof(buf)的1个元素。

在第二种情况下,您希望读取sizeof(buf)元素的数量,其中每个元素是1个字节。第二个可用于读取整个文件的内容,如此qazxswpoi问题。

© www.soinside.com 2019 - 2024. All rights reserved.