C 库 - fread() 函数



C 库的 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) 函数从给定的流中读取数据到由 ptr 指向的数组中。它通常用于读取二进制文件,但也可以用于读取文本文件。

语法

以下是 C 库 fread() 函数的语法:

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

参数

此函数接受三个参数:

  • ptr: 指向一个内存块的指针,读取的数据将存储在此内存块中。
  • size: 要读取的每个元素的大小(以字节为单位)。
  • nmemb: 要读取的元素数量,每个元素的大小为 size 字节。
  • stream: 指向 FILE 对象的指针,该对象指定一个输入流。

返回值

该函数返回成功读取的元素数量,如果发生读取错误或文件结束 (EOF),则该数量可能小于 nmemb。如果 size 或 nmemb 为零,则 fread 返回零,并且 ptr 指向的内存内容保持不变。

示例 1:从二进制文件读取整数数组

该程序从二进制文件读取一个包含 5 个整数的数组,并打印每个整数。

以下是 C 库 fread() 函数的示例。

#include <stdio.h>

int main() {
   FILE *file;
   int numbers[5];
   
   file = fopen("numbers.bin", "rb");
   if (file == NULL) {
       perror("Error opening file");
       return 1;
   }

   size_t result = fread(numbers, sizeof(int), 5, file);
   if (result != 5) {
       perror("Error reading file");
   } else {
       for (int i = 0; i < 5; i++) {
           printf("Number %d: %d\n", i + 1, numbers[i]);
       }
   }
   
   fclose(file);
   return 0;
}

输出

以上代码产生以下结果:

Number 1: 1
Number 2: 2
Number 3: 3
Number 4: 4
Number 5: 5

示例 2:从二进制文件读取结构体

该程序从二进制文件读取一个 Employee 结构体,并打印其成员。

#include <stdio.h>

typedef struct {
   int id;
   char name[20];
   float salary;
} Employee;

int main() {
   FILE *file;
   Employee emp;
   
   file = fopen("employee.bin", "rb");
   if (file == NULL) {
       perror("Error opening file");
       return 1;
   }

   size_t result = fread(&emp, sizeof(Employee), 1, file);
   if (result != 1) {
       perror("Error reading file");
   } else {
       printf("Employee ID: %d\n", emp.id);
       printf("Employee Name: %s\n", emp.name);
       printf("Employee Salary: %.2f\n", emp.salary);
   }
   
   fclose(file);
   return 0;
}

输出

执行以上代码后,我们将得到以下结果:

Employee ID: 101
Employee Name: John Doe
Employee Salary: 55000.00
广告