常用C语言文件操作

2023-11-16

1 fopen

使用fopen需要引用头文件stdio.h,函数声明如下:

FILE *fopen(const char *pathname, const char *mode);

这里要多多关心的是第二个参数mode,关系到我们对文件操作的权限,这里做一个表格:

mode authority
r read only(只读)
r+ read and write(读写)
w write(写,清除当前文件内容 或者 创建一个文件)
w+ read and write(读写,如果文件不存在则创建,否则清除文件内容)
a write(写,从文件末尾开始写内容,如果文件不存在就创建文件)
a+ read and write(读写,从文件末尾开始写内容,如果文件不存在就创建文件)

2 fread / fwrite

从文件流中读取指定数量的内容到缓冲区中

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

第二第三个参数可以理解为,一次读取size字节,总共读取nmemb次,返回值为实际读取到的数量。

	FILE* pf = fopen("test.txt", "r");
	char *p = (char*)malloc(21);
	fread(p, 2, 10, pf);
	p[20] = '\0';
	printf("%s\n", p);
	free(p);

如果读到文件末尾,fread返回的size为0

3 fgetc / fgets

读取一个字节的内容,除了使用上面的fread外,还可以使用fgetc,返回值是一个int(char);读取一行内容可以使用fgets,fgets的第二额参数为读取的最大数量。

int fgetc(FILE *stream); // getc
char *fgets(char *s, int size, FILE *stream);

以下是fgetc和fgets的使用示例:

	FILE* pf = fopen("test.txt", "r");
	char c = fgetc(pf);
	printf("%c\n", c);
	FILE* pf = fopen("test.txt", "r");
	char *p = (char*)malloc(21);
	char* pc = fgets(p, 20, pf);
	printf("%s\n", pc);

4 getchar

getchar是从标准输入(stdin)中读取数据,它会读到我们输入的所有内容,包括空格换行等。如果我们一次输入多个字符,它会逐个字符读取。
如果读到文件末尾,或者读取错误,fgetc / getc / getchar 的返回值为EOF,这是与fread不同的!!

	char c;
	while (c = getchar()) {  // c = fgetc(stdin)
		printf("%c", c);
	}

/*
c	// 输入c换行
c	// getchar拿到c
	// getchar拿到换行
*/

一般可以使用switch case来判断输入是否是我们想要的。

5 isspace / isblank …

这是一个系列方法,可以帮助我们判断读到的字符的特征,包括有如下方法,有需要可以man查看:
isalnum, isalpha, isascii, isblank, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit

isupper / islower :判断字符的大小写
isdigit / isalnum :判断字符是否为0-9(阿拉伯数字)
isalpha :判断字符是否为字母
isblank :判断字符是否为空格(tab / space)
isspace :判断字符是否为空格(space、\f、\n,\r,\t,\v)
isxdigit :判断字符是否为十六进制数

6 fputc / fputs

fputc可以向指定流中写入一个字符;
fputs可以向指定流中写入一串字符;

int fputc(int c, FILE *stream);
int fputs(const char *s, FILE *stream);

以下是使用示例

	const char *str = "Hello world!";
	fputc('c', stdout);
	fputc('\n', stdout);
	fputs(str, stdout);

7 fseek / ftell

以文件流读取方法会按照从前向后的方式读取,如果我们想知道当前读取的位置,可以使用ftell;如果我们想指定文件读取的位置,可以使用fseek。

int fseek(FILE *stream, long offset, int whence);
long ftell(FILE *stream);

fseek第二个参数是偏移量,第三个参数由三个选择,会决定偏移量是从哪里开始偏移。
SEEK_SET:相对于头的偏移量
SEEK_CUR:相对于当前位置的偏移量
SEEK_END:相对于文件末尾的偏移量
读取的时候从偏移的下一位开始读。

fseek的offset可以是负数

	FILE* pf = fopen("test.txt", "r");	// abcdefghijk 
	char c;
	c = fgetc(pf);
	printf("%c %ld\n", c, ftell(pf));	// a 1

	fseek(pf, 3, SEEK_SET);
	c = fgetc(pf);
	printf("%c %ld\n", c, ftell(pf));	// d 4

	fseek(pf, -2, SEEK_CUR);
	c = fgetc(pf);
	printf("%c %ld\n", c, ftell(pf));	// c 3

	fseek(pf, -2, SEEK_END);
	c = fgetc(pf);
	printf("%c %ld\n", c, ftell(pf));	// j 10
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常用C语言文件操作 的相关文章

  • Chisel实验笔记(一)

    最近在学习Risc v 其中伯克利大学开源了一款兼容Risc v指令集的处理器Rocket 而Rocket处理器是采用Chisel编写的 所以要学习Chisel Chisel的简单介绍如下 Chisel Constructing Hardw
  • 基于Arduino的音乐动感节奏灯

    1 音乐动感节奏灯是个什么东西 前段时间听音乐觉得无聊 便想着音乐光听也没意思啊 能不能 看见 音乐呢 于是谷歌了一番 发现还真有人做了将音乐可视化的东西 那就是音乐节奏灯 说的简单点就是LED灯光颜色亮度等随着音乐的节奏而发生变化 看了下
  • 最新机器人工程专业毕设选题推荐

    文章目录 1前言 2 如何选题 3 机器人工程 毕设 选题推荐 4 最后 1前言 近期不少学弟学妹询问学长关于机器人工程专业工程专业相关的毕设选题 学长特意写下这篇文章以作回应 以下是学长亲手整理相关的毕业设计选题 都是经过学长精心审核的题
  • Python-声明变量

    Python如何声明变量 在 Python 中 定义变量非常简单 只需要为变量赋一个值即可自动创建该变量 并推断出变量的数据类型 变量名可以是任意字母 数字或下划线组成 但是不能以数字开头 例如 定义名为 name 的变量 并将字符串 To

随机推荐

  • event类型 php,深入解析PHP的Laravel框架中的event事件操作

    有时候当我们单纯的看 Laravel 手册的时候会有一些疑惑 比如说系统服务下的授权和事件 这些功能服务的应用场景是什么 其实如果没有经历过一定的开发经验有这些疑惑是很正常的事情 但是当我们在工作中多加思考会发现有时候这些服务其实我们一直都
  • 服务器的协议端口在哪里设置,服务器的远程端口号在哪里设置

    服务器的远程端口号在哪里设置 内容精选 换一换 Linux云服务器一般采用SSH连接方式 使用密钥对进行安全地无密码访问 但是SSH连接一般都是字符界面 有时我们需要使用图形界面进行一些复杂操作 本文以Ubuntu 18 04操作系统为例
  • 飞旭体质健康测试云平台学生体质测试管理系统

    飞旭体测数据管理云平台是由体测设备 微信小程序和云平台构成 用户通过设备测试后 数据传输至云端 由云平台对数据进行针对性的统计分析 平台功能包括管理员分级管理 学生体质测试 学生体质测试成绩查询 测试数据管理统计分析 数据上报管理等内容 具
  • 15 周带你学好大一C语言!最详细C语言学习路线

    要学习 C 语言的读者抓紧时间看一下 我按照C语言学习视频的目录整理了一条以 周为单位时间 的学习路线 希望在开学后能按照这个进度去学习一遍 有要学习 C 语言的读者也可以参照 可能有些知识学习起来比较困难 比如说二进制这种涉及到底层方面的
  • iperf linux移植

    参考链接 1 iperf的git地址 windows版下载地址 git clone https github com esnet iperf git 2 下载到ubuntu上 3 找到交叉工具包的位置 opt arm ca9 linux g
  • 绘制复杂的层次的原理图

    一 绘制总体的区域块模块 1 新建一个PCB项目 在new中的project选择PCB 2 在项目中新建一个sheet文件 schemetic 然后找到place中的sheet Symbol Actions 3 修改每一个绿块的名称和文件名
  • 阻止移动端 touchmove 与 scroll 事件冲突

    在移动端开发过程中 如果要实现一个元素或按钮的拖动定位 会出现很多坑 例如 元素上下移动过程中 会触发 body 的 scroll 事件 导致整体的位置偏移 这时就需要 阻止移动端 touchmove 与 scroll 事件冲突 一 解决思
  • 【致敬未来的攻城狮计划】--RA2E1 开发板测评(3)按键输入

    前言 1 首先感谢 李肯前辈的活动 从而申请到了RA2L1开发板的测评 2 本文主要介绍按键输入的内容 3 学习本文需要准备的前提 致敬未来的攻城狮计划 RA2E1 开发板测评 1 keil环境配置 致敬未来的攻城狮计划 RA2L1 开发板
  • 自助Linux之问题诊断工具strace

    引言 Oops 系统挂死了 Oops 程序崩溃了 Oops 命令执行报错 对于维护人员来说 这样的悲剧每天都在上演 理想情况下 系统或应用程序的错误日志提供了足够全面的信息 通过查看相关日志 维护人员就能很快地定位出问题发生的原因 但现实情
  • 去除li前面小点点

    li list style type none
  • 3. 性能测试之目标评估

    文章目录 前言 一 模型1 根据日活计算目标QPS 1 原则 2 事例 二 模型2 根据压测数据评估最大支撑并发 1 原则 2 事例 3 备注 三 模型3 根据压测数据评估服务器资源 1 策略 2 备注 四 模型4 评估用户并发或峰值并发
  • Excel·VBA螺旋数组函数

    目录 1 由外到内顺时针的螺旋数组 实现方法1 代码思路 螺旋数组函数代码 举例 实现方法2 代码思路 螺旋数组函数代码 2 由外到内逆时针的螺旋数组 举例 数字1 12从左上角顺时针依次输出的即为螺旋数组 如下图 1 由外到内顺时针的螺旋
  • 网络编程3——TCP Socket实现的客户端服务器通信完整代码(详细注释帮你快速理解)

    文章目录 前言 一 理论准备 Socket套接字是什么 TCP协议的特点 二 TCP 流套接字提供的API ServerSocket API Socket API 三 代码实现请求响应式 客户端服务器 服务器 客户端 疑惑解答 为什么服务器
  • 获取Android设备唯一标识码

    概述 有时需要对用户设备进行标识 所以希望能够得到一个稳定可靠并且唯一的识别码 虽然Android系统中提供了这样设备识别码 但是由于Android系统版本 厂商定制系统中的Bug等限制 稳定性和唯一性并不理想 而通过其他硬件信息标识也因为
  • Simulink代码生成(二)——代码生成时模型的配置方法及操作流程

    Simulink代码生成 二 代码生成时模型的配置方法及操作流程 文章目录 Simulink代码生成 二 代码生成时模型的配置方法及操作流程 一 模型 二 代码生成设置 1 步长选择 2 系统目标文件设置 3 生成代码打开测试报告 4 保存
  • 为什么如今这么多人讨论网络安全?

    网络安全如今备受讨论 跟各种经济政治的关系是分不开的 并且变得更加复杂多变 网络安全的发展前景更可观 很多安全企业也开始积极寻求各类网络风险的防范方案和数据隐私保护技术 当今世界形势的变化 以及各种因素的不断影响 全球网络安全问题再不断提升
  • Qt扫盲-QSS概述

    QSS概述 一 概述 二 详细 一 概述 QSS 其实是Qt样式表 Qt样式表是Qt界面的一种强大的机制 除了通过继承QStyle已经可以实现的功能外 它还允许您自定义窗口组件的外观 Qt样式表的概念 术语和语法很大程度上受到HTML层叠样
  • sql server 提取汉字、数字和字母的sql server方法

    sql server 提取汉字 数字 字母的方法 提取数字 if object id dbo get number2 is not null drop function dbo get number2 go create function
  • QT学习(五)——从子窗口传来多个信号(带参数的自定义信号)

    同样是两个窗口 主窗口与副窗口 给副窗口自定义两个重载的信号 传给主窗口处理 void mySignals 信号可以重载 void mySignals int QString 由被关联的按钮发送消息 并送出两条消息给主窗口 emit myS
  • 常用C语言文件操作

    1 fopen 使用fopen需要引用头文件stdio h 函数声明如下 FILE fopen const char pathname const char mode 这里要多多关心的是第二个参数mode 关系到我们对文件操作的权限 这里做