- C 标准库
- C 库 - 首页
- C 库 - <assert.h>
- C 库 - <complex.h>
- C 库 - <ctype.h>
- C 库 - <errno.h>
- C 库 - <fenv.h>
- C 库 - <float.h>
- C 库 - <inttypes.h>
- C 库 - <iso646.h>
- C 库 - <limits.h>
- C 库 - <locale.h>
- C 库 - <math.h>
- C 库 - <setjmp.h>
- C 库 - <signal.h>
- C 库 - <stdalign.h>
- C 库 - <stdarg.h>
- C 库 - <stdbool.h>
- C 库 - <stddef.h>
- C 库 - <stdio.h>
- C 库 - <stdlib.h>
- C 库 - <string.h>
- C 库 - <tgmath.h>
- C 库 - <time.h>
- C 库 - <wctype.h>
- C 标准库资源
- C 库 - 快速指南
- C 库 - 有用资源
- C 库 - 讨论
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
广告