fread() 参数 2 和 3
fread() parameters 2 and 3
有什么区别:
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() reads nmemb items of data, each size bytes long"。我认为最终读取的字节数必须是 size * nmemb
但出于某种原因只有第二种语法(大小 = 1)对我有用。
区别在于以下两个:
- return 值是实际读取的元素数(零到
nmemb
)。这在你的两个声明中是不同的,如果他们成功的话。
第一种情况:
fread( buf, sizeof(buf), 1, file )
你要么得到全部,要么一无所有;如果文件较小,fread
无法读取小于 sizeof(buf)
的内容。
第二种情况:
fread( buf, 1, sizeof(buf), file );
您允许 fread
读取尽可能多的字节,即使文件中可用的字节少于 sizeof(buf)
。实际读取的元素数量(本例中为字节)将被 returned.
第二个参数指定要读取的元素的大小。第三个参数指定要读取多少个元素。
所以在第一种情况下你想读取大小为 1 的元素 = sizeof(buf).
在第二种情况下,您想要读取 sizeof(buf) 个元素,其中每个元素为 1 字节。第二个可以用来读取整个文件的内容,如这个 How to set/get unsigned char * to and from std::shared_ptr<uint8_t>? 问题。
有什么区别:
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() reads nmemb items of data, each size bytes long"。我认为最终读取的字节数必须是 size * nmemb
但出于某种原因只有第二种语法(大小 = 1)对我有用。
区别在于以下两个:
- return 值是实际读取的元素数(零到
nmemb
)。这在你的两个声明中是不同的,如果他们成功的话。 第一种情况:
fread( buf, sizeof(buf), 1, file )
你要么得到全部,要么一无所有;如果文件较小,
fread
无法读取小于sizeof(buf)
的内容。第二种情况:
fread( buf, 1, sizeof(buf), file );
您允许
fread
读取尽可能多的字节,即使文件中可用的字节少于sizeof(buf)
。实际读取的元素数量(本例中为字节)将被 returned.
第二个参数指定要读取的元素的大小。第三个参数指定要读取多少个元素。
所以在第一种情况下你想读取大小为 1 的元素 = sizeof(buf).
在第二种情况下,您想要读取 sizeof(buf) 个元素,其中每个元素为 1 字节。第二个可以用来读取整个文件的内容,如这个 How to set/get unsigned char * to and from std::shared_ptr<uint8_t>? 问题。