对于fread的返回值感到困惑

问题描述 投票:0回答:1

我正在尝试使用fread读取文件。我将其基于此处的文档:http://www.cplusplus.com/reference/cstdio/fread/

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

这是我所拥有的:

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的计数。

c++ fread
1个回答
0
投票

fread功能定义为as follows

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函数返回的结果。

© www.soinside.com 2019 - 2024. All rights reserved.