对fread的返回值感到困惑

Confused about the return value from fread

本文关键字:返回值 fread      更新时间:2023-10-16

我正在尝试使用fread读取中的文件。我是基于这里的文档:http://www.cplusplus.com/reference/cstdio/fread/

我想一次从一个文件中读取4个切片。

这是我的:

int vol_buffer_size = SLICE_SIZE * 4;  //SLICE_SIZE = 759000  bytes
unsigned short vol_buffer[vol_buffer_size];
for (int j = 0; j < num_slps; j++){                   
nByteRead = fread(&vol_buffer, SLICE_SIZE, 4, volFile);
}

当我这样做时,nByteRead在第一次读取时显示为4个字节。当我这样做的时候:

nByteRead = fread(&vol_buffer, 4, SLICE_SIZE, volFile);

nByteRead的大小为759000字节,或一个切片。但我希望它能读取759000*4字节,相当于4个切片。我在这里做错了什么?我很困惑,因为文档中说第二个参数是我认为是SLICE_size的大小,而第三个参数是计数,我认为在这种情况下是4。

fread函数定义如下:

size_t fread (void * ptr, size_t size, size_t count, FILE * stream);

其中size自变量指定要读取的每个元素的大小(以字节为单位),count指定要读取此类元素的(最大)数量。返回值是成功读取的元素数。所以,在你的第一个案例中:

nByteRead = fread(&vol_buffer, SLICE_SIZE, 4, volFile);

元素的大小给定为759000,并且您要求读取(最多)4这样的对象。调用成功,函数返回4。在第二种情况下:

nByteRead = fread(&vol_buffer, 4, SLICE_SIZE, volFile);

您要求读取759000元素,每个元素的大小都是4字节。再次,调用成功并返回读取了多少元素。

在这两种情况下,读取的字节数是相同的(4 x 759000),但这个不是fread函数返回的