fread()参数2和3

时间:2017-12-21 10:39:14

标签: c linux stdio

有什么区别:

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

2 个答案:

答案 0 :(得分:5)

区别在于以下两点:

  1. 返回值是实际读取的元素数(零到nmemb)。如果他们成功,这在你的两个陈述中是不同的。
  2. 在第一种情况下:

    fread( buf, sizeof(buf), 1, file )
    

    你会得到全部或全部;在文件较小的情况下,fread无法读取小于sizeof(buf)的内容。

    在第二种情况下:

    fread( buf, 1, sizeof(buf), file );
    

    允许fread尽可能多地读取字节,即使文件中的sizeof(buf)小于const here = [{a: 'abc'},{b: 'xyz'}]也是如此。

  3. 将返回实际读取的元素数(本例中为字节数)

答案 1 :(得分:0)

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

因此,在第一种情况下,您希望阅读尺寸= sizeof(buf) 1 元素。

在第二种情况下,您想要读取每个元素 1 字节的 sizeof(buf)元素数。第二个可用于读取整个文件的内容,如此How to set/get unsigned char * to and from std::shared_ptr<uint8_t>?问题。