如何正确使用fread?

How to use fread correctly?

我见过两种向 fread 提供文件大小的方法。

如果假设我有一个字符数组 data,一个 file 指针,filesize 是以字节为单位的文件大小,那么第一个是:

fread(data, 1, filesize, file);

第二个:

fread(data, filesize, 1, file);

我的问题是,这两行代码有什么区别吗?
哪一行代码更"correct".

此外,我假设两行代码中的 1 实际上意味着 sizeof(char),是否正确?

第一个告诉 fread 读取大小为 1 的元素,它们的文件大小。

第二个告诉 fread 读取大小为 1 的文件大小元素。

理论上两者产生相同的结果。

Argument 2: size of each member

Argument 3: Number of objects you want to read

现在你的问题:

is there any difference between the two lines of code?

fread(data, 1, filesize, file);

读取数据指向的 filesize 个对象,其中每个对象的大小为 1 个字节。 如果读取的字节少于 filesize 个,将只读取部分字节。

fread(data, filesize, 1, file);

读取数据指向的 1 对象,该对象的大小为 filesize 字节。如果少于 filesize 字节可用,将读取 none。

按照你的程序要求做任何事情。

在实践和理论上都产生相同的结果。但是如果你尊重 'fread' 标准,第一行是正确的。