c++ - 对 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 的计数。
解决方案
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
。
推荐阅读
- javascript - 如何在基本 js 1.X ejgrid 小部件中单击按钮时克隆一行
- python - 如何为每一方绘制时间序列图以及他们每年获得的总票数
- git - 吉特 | 詹金斯 | 权限被拒绝(公钥)
- javascript - 操作对象数组
- git - git 重置后返回最新提交
- javascript - 每次在mysql数据库中插入新记录时刷新div
- javascript - Postman:在正文中传递环境变量时,MD5 验证失败
- javascript - 如果使用了 window.location,用户不能按返回按钮返回上一页
- java - 启用 Java 本机内存跟踪 (NMT) 对性能有何影响?
- php - 具有重定向和动态内容的多语言 WordPress