首页 > 解决方案 > 对 fread 的返回值感到困惑

问题描述

我正在尝试使用 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 的计数。

标签: c++fread

解决方案


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


推荐阅读