当前位置: 首页 > web >正文

C语言文件读写函数详解与示例(fread、fgets、fgetc、fscanf、fwrite、fputs 和 fputc比较)

在进行文件操作时,C语言为我们提供了多种强大而灵活的函数。本文将详细介绍常用的文件读写函数:fread、fgets、fgetc、fscanf、fwrite、fputs 和 fputc,并通过示例代码加以说明。

一、文件读取函数(从文件里“读”数据)

1. fread —— 读二进制数据块

函数原型

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

参数解释:

  • ptr:指向接收数据的缓冲区的指针。
  • size:每个数据块的大小(以字节为单位)。
  • count:要读取多少个数据块。
  • stream:文件指针。

代码示例:

#include <stdio.h>int main() {FILE *fp = fopen("example.bin", "rb");  // 打开一个二进制文件,模式为“读”(r)+“二进制”(b)if (!fp) return 1;  // 打开失败就退出char buffer[100];  // 创建一个长度为100的字符数组来接收数据size_t n = fread(buffer, sizeof(char), 100, fp);  // 读取最多100个字节到 buffer 中printf("Read %zu bytes\n", n);  // 打印实际读取的字节数fclose(fp);  // 关闭文件return 0;
}

2. fgets —— 一次读一行,适合文本文件

函数原型:

char *fgets(char *str, int n, FILE *stream);

参数解释:

  • str:接收读取结果的字符数组。
  • n:最多读取 n-1 个字符,留一个位置给字符串结束符 \0。
  • stream:文件指针。

代码示例:

#include <stdio.h>int main() {FILE *fp = fopen("example.txt", "r");  // 打开文本文件,模式为只读if (!fp) return 1;char line[256];  // 准备一个数组来存放每一行while (fgets(line, sizeof(line), fp)) {  // 逐行读取文件内容printf("%s", line);  // 打印当前行}fclose(fp);return 0;
}

3. fgetc —— 一次读一个字符

函数原型:

int fgetc(FILE *stream);

代码举例:

#include <stdio.h>int main() {FILE *fp = fopen("example.txt", "r");  // 打开文本文件if (!fp) return 1;int ch;while ((ch = fgetc(fp)) != EOF) {  // fgetc 读取一个字符(返回 int),遇到文件结尾返回 EOFputchar(ch);  // 输出读取的字符}fclose(fp);return 0;
}

4. fscanf —— 从文件中格式化读取,类似 scanf

函数原型:

int fscanf(FILE *stream, const char *format, ...);

假设 data.txt 中有如下内容:

Tom 25

代码举例:

#include <stdio.h>int main() {FILE *fp = fopen("data.txt", "r");  // 打开文件if (!fp) return 1;char name[50];int age;fscanf(fp, "%s %d", name, &age);  // 从文件中读取一个字符串和一个整数printf("Name: %s, Age: %d\n", name, age);  // 打印结果fclose(fp);return 0;
}

二、文件写入函数(把数据“写”进文件)

1. fwrite —— 写二进制数据块

函数原型

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

代码举例:

#include <stdio.h>int main() {FILE *fp = fopen("output.bin", "wb");  // 打开文件写二进制数据(w + b)if (!fp) return 1;char data[] = "Hello, binary!";fwrite(data, sizeof(char), sizeof(data), fp);  // 写入整个字符串(包括结尾的 '\0')fclose(fp);return 0;
}

2. fputs —— 写一行字符串(不自动加换行)

函数原型:

int fputs(const char *str, FILE *stream);
  • str:指向要写入的以 null 结尾的字符串(const char *)。
  • stream:表示写入目标的文件流(通常由 fopen() 打开)。

代码举例:

#include <stdio.h>int main() {FILE *fp = fopen("output.txt", "w");  // 打开文本文件写入if (!fp) return 1;fputs("This is a line.\n", fp);  // 写入一行(我们手动加了换行)fclose(fp);return 0;
}

3. fputc —— 写一个字符

函数原型:

int fputc(int character, FILE *stream);
  • character:要写入的字符(注意是 int 类型,但只写入低 8 位)。
  • stream:目标文件指针。

代码举例:

#include <stdio.h>int main() {FILE *fp = fopen("output.txt", "w");  // 打开文件写入if (!fp) return 1;fputc('A', fp);  // 写入字符 Afputc('\n', fp);  // 写入换行符fclose(fp);return 0;
}

总结:

函数类型作用使用场景
fread读取读取二进制数据图片、音频等非文本文件
fgets读取读取一行字符串文本文件(逐行读)
fgetc读取读取一个字符逐个字符分析文件
fscanf读取按格式读取文本数据(如姓名、数字)
fwrite写入写入二进制数据保存图片、日志
fputs写入写入字符串写入一行或多行文本
fputc写入写入一个字符控制字符写入(逐个字符)
http://www.xdnf.cn/news/5480.html

相关文章:

  • 专业课复习笔记 5
  • 可视化赋能电子围栏:开启智能安防新视界
  • 9.1.领域驱动设计
  • 大模型应用中常说的Rerank是什么技术?
  • 第26节:卷积神经网络(CNN)-数据增强技术(PyTorch)
  • URP - 能量罩实现
  • Scala 中累加器的创建与使用格式详解
  • 【面板数据】省级农业及农村现代化指标数据(2011-2022年)
  • C++初阶-string类的增删的模拟实现
  • C# 通过ConfigurationManager读写配置文件App.Config
  • 如何实现并运用责任链模式
  • 英语时态--中英文对“时间”的不同理解
  • 抽奖系统-基本-注册
  • Redis从基础到高阶应用:核心命令解析与延迟队列、事务消息实战设计
  • JVM 监控
  • 【Java学习笔记】多态
  • HTML5中的Microdata与历史记录管理详解
  • 安装typescript时,npm install -g typescript报错
  • .Net HttpClient 处理响应数据
  • 每日一题洛谷P8615 [蓝桥杯 2014 国 C] 拼接平方数c++
  • 被一个人影响情绪是爱吗?这 3 个真相越早明白越好
  • AI面经总结-试读
  • 深度解析六大AI爬虫工具:crawl4ai、FireCrawl、Scrapegraph-ai、Jina、SearXNG、Tavily技术对比与实战指南
  • COT思维链:SequentialChain 方法有哪些参数;优化后的提示词
  • ES面试题系列「一」
  • MySQL的索引分类
  • 软件体系结构(Software Architecture)
  • IDEA:如何设置最上面菜单栏一直显示出来
  • 图片转ICO图标工具
  • 一个网球新手的学习心得