fread()参数2和3

i48*_*486 0 c linux stdio

有什么区别:

fread( buf, sizeof buf, 1, file ); // 'file' is valid open 'FILE *'
Run Code Online (Sandbox Code Playgroud)

fread( buf, 1, sizeof buf, file );
Run Code Online (Sandbox Code Playgroud)

参数2和3被size_t size, size_t nmemb描述为"fread()读取nmemb数据项,每个字节长度为".我认为读取的最终字节数必须是size * nmemb但由于某种原因,只有第二种语法(大小= 1)对我有效.

Yan*_*ked 5

区别在于以下两点:

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

    fread( buf, sizeof(buf), 1, file )
    
    Run Code Online (Sandbox Code Playgroud)

    你会得到全部或全部; fread无法读取小于sizeof(buf)文件较小的内容.

    在第二种情况:

    fread( buf, 1, sizeof(buf), file );
    
    Run Code Online (Sandbox Code Playgroud)

    您允许fread读取尽可能多的字节,即使sizeof(buf)文件中的可用字节数少于可用字节.将返回实际读取的元素数(本例中为字节数).