17 - fread()函数

本文详细介绍了fread()函数的使用方法,包括其函数原型、参数说明、返回值解释及示例代码。通过阅读本文,读者可以了解到如何利用fread()从文件中读取固定大小的数据块。

1 函数原型

fread():从指定流stream中读取数据块,函数原型如下:

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

cstdio库描述如下:

Read block of data from stream
1. Reads an array of count elements, each one with a size of size bytes, from the stream and stores them in the block of memory specified by ptr.
2. The position indicator of the stream is advanced by the total amount of bytes read.
3. The total amount of bytes read if successful is (size*count).

2 参数

fread()函数有四个参数ptr、size、count和stream:

  1. 参数ptr是指向某内存区域的指针,类型为void*型;ptr指向的内存区域用于存储从文件中读取的数据块;
  2. 参数size是fread()函数要读取的数据项的大小,类型为size_t型,单位是字节;
  3. 参数count是fread()函数要读取的数据项的个数,类型为size_t型;
  4. 参数stream是fread()函数要读取的流,类型为FILE*;stream主要是文件流,就是fopen()函数的返回值。

cstdio库描述如下:

ptr
1. Pointer to a block of memory with a size of at least (size*count) bytes, converted to a void*.

size
1. Size, in bytes, of each element to be read.
2. size_t is an unsigned integral type.

count
1. Number of elements, each one with a size of size bytes.
2. size_t is an unsigned integral type.

stream
1. Pointer to a FILE object that specifies an input stream.

3 返回值

fread()函数的返回值类型为size_t型,返回从文件成功读取的数据项的数量。

cstdio库描述如下:

1. The total number of elements successfully read is returned.
2. If this number differs from the count parameter, either a reading error occurred or the end-of-file was reached while reading. 
3. In both cases, the proper indicator is set, which can be checked with ferror and feof, respectively.
4. If either size or count is zero, the function returns zero and both the stream state and the content pointed by ptr remain unchanged.
5. size_t is an unsigned integral type.

fread()函数,预期读取m项,成功读取n项:

读取比较读取状况读取结果返回值状态设置
n=m全部成功读取读取成功返回nNA
0≤n<m遇到读取错误读取成功返回n设置错误指示符(ferror)
0≤n<m遇到文件末尾读取成功返回n设置文件结束指示符(feof)

4 示例

使用fread()函数读空文件,示例代码如下所示:

int main()
{
   //
   FILE* fp = NULL;
   int rdata = 0;
   //
   fp = fopen("1.dat", "rb");

   if (fp == NULL) {
      perror("Failed to open file ");
      exit(1);
   }
   //
   while(fread(&rdata, sizeof(int), 1, fp) > 0) {
      printf("%#x\n", rdata);
   }
   //
   fclose(fp);
   //
   return 0;
}

文件内容如下图所示:

在这里插入图片描述

代码运行结果如下图所示:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值