【C语法学习】18 - fread()函数

1 函数原型

fread():从与指定流stream相关联的二进制文件中读取数据块储存在str指向的内存空间中,函数原型如下:

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

2 参数

fwrite()函数有四个参数:

  1. 参数ptr是指向某内存空间的指针,该内存空间用于储存从文件中读取的数据块;参数ptr类型为void*型,说明ptr可以指向任何数据类型;
  2. 参数size指定了每个从文件读取的数据项的字节大小,类型为size_t(unsigned int)型;
  3. 参数count指定了从文件读取的数据项的个数,类型为size_t(unsigned int)型;
  4. 参数stream是一个指向FILE类型结构的指针;参数stream指定了fread()函数要读取的文件流,等于fopen()函数的返回值。

3 返回值

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

C语言标准描述如下:

1. Number of objects read successfully, which may be less than count if an error or end-of-file condition occurs.
2. If size or count is zero, fread returns zero and performs no other action.
3. fread does not distinguish between end-of-file and error, and callers must use feof and ferror to determine which occurred.

4 示例

4.1 示例1

先使用fwrite()函数先写文件,后使用fread()函数读文件并打印,代码如下所示:

#define SIZE 20

int main()
{
   //
   int arr1[SIZE] = { 0 };
   int arr2[SIZE] = { 0 };
   int count;
   for (count = 0; count < SIZE; count++)
   {
      arr1[count] = 2 * count;
   }
   //
   FILE* fp;
   if ((fp = fopen("1.dat", "wb")) == NULL)
   {
      printf("Failed to open file.\n");
      exit(1);
   }
   if ((fwrite(arr1, sizeof(arr1), 1, fp)) != 1)
   {
      printf("Failed to write file.\n");
      exit(1);
   }
   fclose(fp);
   //
   if ((fp = fopen("1.dat", "rb")) == NULL)
   {
      printf("Failed to open file.\n");
      exit(1);
   }
   if ((fread(arr2, sizeof(arr2), 1, fp)) != 1)
   {
      printf("Failed to read file.\n");
      exit(1);
   }
   fclose(fp);
   //
   for (count = 0; count < SIZE; count++)
   {
      printf("%d\t%d\n", arr1[count], arr2[count]);
   }

   return 0;
}

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

在这里插入图片描述

4.1 示例2

使用fread()函数读文件,文件包含的项数小于需要读取的项数,示例代码如下:

#define SIZE 30

int main()
{
   //
   FILE* fp;
   int arr[SIZE] = { 0 };
   int itemsread = 0;
   //
   if ((fp = fopen("2.dat", "rb")) == NULL)
   {
      printf("Failed to open file.\n");
      exit(1);
   }
   //
   itemsread = fread(arr, sizeof(int), SIZE, fp);
   //
   printf("bytesread = %d\n", itemsread);
   //
   fclose(fp);
   //
   int i = 0;
   for (i = 0; i < SIZE; i++)
   {
      printf("%d\n", arr[i]);
   }

   return 0;
}

文件包含内容如下图所示:

在这里插入图片描述

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

在这里插入图片描述

代码及运行结果分析如下:

  1. 文件只包含20个int类型数据;
  2. fread()函数需要读取30个int类型数据,itemsread=20表示实际只读取20个int类型数据。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值