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 对象的指针,该对象指定一个输入流。

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

返回值

该函数返回成功读取的元素数量,如果发生读取错误或文件结束 (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
广告