如何正确使用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' 标准,第一行是正确的。
我见过两种向 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' 标准,第一行是正确的。