有什么区别:
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数据项,每个字节长度为#34;。我认为读取的最终字节数必须是size * nmemb
,但由于某种原因,只有第二种语法(大小= 1)对我有效。
答案 0 :(得分:5)
区别在于以下两点:
nmemb
)。如果他们成功,这在你的两个陈述中是不同的。在第一种情况下:
fread( buf, sizeof(buf), 1, file )
你会得到全部或全部;在文件较小的情况下,fread
无法读取小于sizeof(buf)
的内容。
在第二种情况下:
fread( buf, 1, sizeof(buf), file );
允许fread
尽可能多地读取字节,即使文件中的sizeof(buf)
小于const here = [{a: 'abc'},{b: 'xyz'}]
也是如此。
答案 1 :(得分:0)
第二个参数指定要读取的元素的大小。第三个参数指定要读取的元素数。
因此,在第一种情况下,您希望阅读尺寸= sizeof(buf)的 1 元素。
在第二种情况下,您想要读取每个元素 1 字节的 sizeof(buf)元素数。第二个可用于读取整个文件的内容,如此How to set/get unsigned char * to and from std::shared_ptr<uint8_t>?问题。