对fread的返回值感到困惑
Confused about the return value from 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
函数返回的。
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 查找 GCD:并非所有控制路径都返回值
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 如何从 std::thread 返回值
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 方法错误"not all control paths return a value"和方法不返回值
- 如何读取 C++ SAFEARRAY**,该 SAFEARRAY** 是 COM 互操作的结果,其中 C# 返回值为
- 对fread的返回值感到困惑
- 程序不向函数返回值
- 如何在另一个函数中使用返回值作为参数?
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 使用 std::p air 进行返回值优化
- C++输出参数与返回值