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

C语言文件操作:打开关闭,读写

程序文件

源程序文件(后缀为.c)
目标文件(Windows环境后缀为.obj)
可执行文件(Windows环境后缀为.exe)

fputc

	FILE* pf = fopen("test.txt","w");if (pf == NULL){printf("%s\n", strerror(errno));return 1;}//写文件char i = 0;for (i = 'a'; i <= 'z'; i++){fputc(i, pf);}

fgetc

	FILE* pf = fopen("test.txt","r");if (pf == NULL){printf("%s\n", strerror(errno));return 1;}//读文件int ch = 0;while ((ch=fgetc(pf)) != EOF){printf("%c ",ch);}

fputs

	FILE* pf = fopen("test.txt","w");  //w在文件打开的时候就清理掉数据了//写文件的时候,如果有内容,会销毁再重新写数据//FILE* pf = fopen("test.txt", "a");  写a可以实现追加if (pf == NULL){printf("%s\n", strerror(errno));return 1;}//写一行数据fputs("hello world\n", pf);

fgets

	FILE* pf = fopen("test.txt","r");  if (pf == NULL){perror("fopen");return 1;}//读一行数据char arr[20];fgets(arr, 5, pf); //读5个字符,但自己加一个\0,实际读四个printf("%s\n", arr);  //hello中只读了hell

fprintf


struct s
{char arr[10];int age;float score;};
int main()
{	struct s s = { "zs",22,23.3f };FILE* pf = fopen("test.txt","w");  if (pf == NULL){perror("fopen"); //fopen是自己加的return 1;}fprintf(pf,"%s %d %f", s.arr, s.age, s.score);//关闭文件fclose(pf);pf = NULL;return 0;
}

fscanf
格式化输入函数

struct s s = { 0 };FILE* pf = fopen("test.txt","r");  if (pf == NULL){perror("fopen"); //fopen是自己加的return 1;}fscanf(pf, "%s %d %f", s.arr, &(s.age), &(s.score));printf("%s %d %f", s.arr, s.age, s.score);

任何一个c程序,只要运行起来,就会默认打开三个流
它们的类型都是FILE*
FILE* stdin - 标准输入流 (键盘)
FIEL* stdout - 标准输出流(屏幕)
FILE* stderr - 标准错误流(也是屏幕)

	fprintf(stdout,"%s %d %f", s.arr, s.age, s.score);  //打印到屏幕上去

fwrite
以二进制的形式写进文件中

	struct s s = {"zhangsan",25,50.5f};FILE* pf = fopen("test.txt","wb");  if (pf == NULL){perror("fopen"); return 1;}fwrite(&s, sizeof(struct s), 1, pf);

fread
以二进制的方式读

struct s s = {0};FILE* pf = fopen("test.txt","rb");  if (pf == NULL){perror("fopen"); return 1;}fread(&s, sizeof(struct s), 1, pf);printf("%s %d %f", s.arr, s.age, s.score);

scanf是针对标准输入的格式化输入语句
printf是针对标准输入的格式化输出语句
fscanf是针对所有输入流的格式化输入语句
fprintf是针对所有输入流的格式化输出语句
sscanf从一个字符串中转化成一个格式化的数据 (序列化)
sprintf 把一个格式化的数据转化成字符串(反序列化)

	struct s s = {"zhangsan",20,55.5f};struct s tmp = { 0 };char buf[100] = { 0 };sprintf(buf, "%s %d %f", s.arr, s.age, s.score);//sprintf 把一个格式化的数据写到字符串中,本质是把一个格式化的数据转换成字符串printf("%s\n", buf);sscanf(buf, "%s %d %f", tmp.arr, &(tmp.age), &(tmp.score)); //从字符串中获取一个格式化的数据到tmp中printf("%s %d %f\n", tmp.arr, tmp.age, tmp.score);

在这里插入图片描述
fseek定位文件指针,ftell计算当前文件指针的偏移量

	fseek(pf, 2 ,SEEK_SET); //文件内容abcdef  直接定位到cint ch = fgetc(pf); printf("%c ", ch);printf("%d\n", ftell(pf)); //3fseek(pf, 2, SEEK_CUR); //文件内容abcdef  直接定位到fch = fgetc(pf);printf("%c ", ch);printf("%d\n", ftell(pf)); //6fseek(pf, -1, SEEK_END);ch = fgetc(pf);printf("%c ", ch);printf("%d\n", ftell(pf)); //6

rewind让文件指针位置回到文件起始位置

	rewind(pf);ch = fgetc(pf);printf("%c ", ch); //a

feof应用于当文件读取结束的时候,判断是读取失败结束还是文件尾结束

文本文件读取是否结束判断,判断返回值是否为EOF或者NULL
fgetc判断是否为EOF
fgets判断返回值是否为NULL

二进制文件的读取结束判断判断返回值是否小于实际要读的个数
fread判断返回值是否小于实际要读的个数

	//判断是什么原因结束的if (ferror(pf)){puts("I?O error when reading ");}else if (feof(pf)){puts("end of the file reached successfully");}

文件缓冲区
因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件
如果不做,可能导致读写文件的问题

相关文章:

C语言文件操作:打开关闭,读写

程序文件 源程序文件&#xff08;后缀为.c&#xff09; 目标文件&#xff08;Windows环境后缀为.obj&#xff09; 可执行文件&#xff08;Windows环境后缀为.exe&#xff09; fputc FILE* pf fopen("test.txt","w");if (pf NULL){printf("%s\n"…...

启智CV机器人,ROS,ubuntu 20.04 【最后一步有问题】

资料&#xff1a; https://wiki.ros.org/kinetic/Installation/Ubuntu https://blog.csdn.net/qq_44339029/article/details/120579608 装VM。 装ubuntu20.04 desktop.iso系统。 装vm工具&#xff1a; sudo apt update sudo dpkg --configure -a sudo apt-get autoremove o…...

React-生成随机数和日期格式化

生成随机数 uuid文档&#xff1a;https://github.com/uuidjs/uuid npm install uuid import {v4 as uuidV4} from uuid 使用&#xff1a; uuidV4() 日期格式化 dayjs文档&#xff1a;安装 | Day.js中文网 npm install dayjs import dayjs from dayjs...

11Linux学习笔记

Linux 实操篇 目录 文章目录 Linux 实操篇1.rtm包&#xff08;软件&#xff09;1.1 基本命令1.2 基本格式1.3安装rtm包1.4卸载rtm包 2.apt包2.1 基本命令结构2.2 常用选项2.3常用命令 1.rtm包&#xff08;软件&#xff09; 1.1 基本命令 1.2 基本格式 1.3安装rtm包 1.4卸载r…...

004 仿muduo实现高性能服务器组件_Buffer模块与Socket模块的实现

​&#x1f308;个人主页&#xff1a;Fan_558 &#x1f525; 系列专栏&#xff1a;仿muduo &#x1f339;关注我&#x1f4aa;&#x1f3fb;带你学更多知识 文章目录 前言Buffer模块Socket模块 小结 前言 这章将会向你介绍仿muduo高性能服务器组件的buffer模块与socket模块的实…...

研发效能DevOps: Ubuntu 部署 JFrog 制品库

目录 一、实验 1.环境 2.Ubuntu 部署 JFrog 制品库 3.Ubuntu 部署 postgresql数据库 4.Ubuntu 部署 Xray 5. 使用JFrog 增删项目 二、问题 1.Ubuntu 如何通过apt方式部署 JFrog 制品库 2.Ubuntu 如何通过docker方式部署 JFrog 制品库 3.安装jdk报错 4.安装JFrog Ar…...

hadoop学习笔记

hadoop集群搭建 hadoop摘要 Hadoop 是一个开源的分布式存储和计算框架&#xff0c;旨在处理大规模数据集并提供高可靠性、高性能的数据处理能力。它主要包括以下几个核心组件&#xff1a; Hadoop 分布式文件系统&#xff08;HDFS&#xff09;&#xff1a;HDFS 是 Hadoop 的分布…...

使用dockerfile快速构建一个带ssh的docker镜像

不多说先给代码 FROM ubuntu:22.04 # 基础镜像 可替换为其他镜像 USER root RUN echo root:root |chpasswd RUN apt-get update -y \&& apt-get install -y git wget curl RUN apt-get install -y openssh-server vim && apt clean \&& rm -rf /tmp/…...

linux部署运维1——centos7.9离线安装部署涛思taos2.6时序数据库TDengine

在实际项目开发过程中&#xff0c;并非一直都使用关系型数据库&#xff0c;对于工业互联网类型的项目来说&#xff0c;时序型数据库也是很重要的一种&#xff0c;因此掌握时序数据库的安装配置也是必要的技能&#xff0c;不过对于有关系型数据库使用的开发工作者来说&#xff0…...

Linux shell编程学习笔记51: cat /proc/cpuinfo:查看CPU详细信息

0 前言 2024年的网络安全检查又开始了&#xff0c;对于使用基于Linux的国产电脑&#xff0c;我们可以编写一个脚本来收集系统的有关信息。对于中央处理器CPU比如&#xff0c;我们可以使用cat /proc/cpuinfo命令来收集中央处理器CPU的信息。 1. /proc/cpuinfo 保存了系统的cpu…...

Ps:调整画笔工具

调整画笔工具 Adjustment Brush Tool可以将选区、创建蒙版和应用调整的传统工作流程合并为一个步骤&#xff0c;简化了对图像进行非破坏性局部调整的操作。 快捷键&#xff1a;B 调整画笔工具是 Photoshop 2024 年 5 月版&#xff08;25.9 版&#xff09;新增的工具。 ◆ ◆ …...

香橙派 AIpro上手体验并验证车道线识别算法

香橙派 AIpro上手体验并验证车道线识别算法 1.前言 最近入手了一块香橙派AIpro&#xff0c;体验了一下&#xff0c;感觉还不错&#xff0c;在这里分享给大家&#xff0c;大家可以做个参考。 2.开箱 整套产品包含一块主板、一个电源插头和一条双端Type-C的数据线&#xff0c;…...

为啥装了erlang,还报错erl: command not found?

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题背景&#xff1a; 在一台不通外网的服务器上装rabbitmq&#xff0c;然后在启动的时候&#xff0c;遇到了报错 “/usr/lib/…...

容器技术基础理论与常用命令:必知必会,效率翻倍!

如何利用容器技术提升你的工作效率&#xff1f;掌握基础理论和常用命令是必不可少的&#xff0c;本文将为你全面介绍容器技术&#xff0c;并教你必知必会的技能&#xff0c;让你工作、学习效率翻倍&#xff0c;对于网络安全工作者也是必不可少的技能&#xff01; 0. 引言 学习…...

ChatGPT Edu版本来啦:支持GPT-4o、自定义GPT、数据分析等

5月31日&#xff0c;OpenAI在官网宣布&#xff0c;推出ChatGPT Edu版本。 据悉&#xff0c;这是一个专门为大学校园提供的ChatGTP&#xff0c;支持GPT-4o、网络搜索、自定义GPT、数据分析、代码生成等功能&#xff0c;可以极大提升学生、老师的学习质量和教学效率。 目前&…...

Spark RDD案例

Apache Spark中的RDD&#xff08;Resilient Distributed Dataset&#xff09;是一个不可变、分布式对象集合&#xff0c;它允许用户在大型集群上执行并行操作。虽然RDD在Spark的早期版本中非常核心&#xff0c;但随着DataFrame和Dataset的引入&#xff0c;RDD的使用在某些场景下…...

【线性表 - 数组和矩阵】

数组是一种连续存储线性结构&#xff0c;元素类型相同&#xff0c;大小相等&#xff0c;数组是多维的&#xff0c;通过使用整型索引值来访问他们的元素&#xff0c;数组尺寸不能改变。 知识点数组与矩阵相关题目 # 知识点 数组的优点: 存取速度快 数组的缺点: 事先必须知道…...

Springboot 开发 -- 跨域问题技术详解

一、跨域的概念 跨域访问问题指的是在客户端浏览器中&#xff0c;由于安全策略的限制&#xff0c;不允许从一个源&#xff08;域名、协议、端口&#xff09;直接访问另一个源的资源。当浏览器发起一个跨域请求时&#xff0c;会被浏览器拦截&#xff0c;并阻止数据的传输。 这…...

【Qt】之【项目】整理可参考学习的git项目链接(持续更新)

Tcp 通信相关 IM即时通讯设计 高并发聊天服务&#xff1a;服务器 qt客户端&#xff08;附源码&#xff09; - DeRoy - 博客园 未使用protobuf通讯协议格式 github&#xff1a;GitHub - ADeRoy/chat_room: IM即时通讯设计 高并发聊天服务&#xff1a;服务器 qt客户端 QT编…...

2024年5月个人工作生活总结

本文为 2024年5月工作生活总结。 研发编码 golang 多个defer函数执行顺序 golang 函数中如有多个defer&#xff0c;倒序执行。示例代码&#xff1a; func foo() {defer func() {fmt.Println("111")}()defer func() {fmt.Println("2222")}()defer func()…...

该不该现在买房?AI浪潮下,你的房贷是资产还是负债?

该不该现在买房&#xff1f;AI浪潮下&#xff0c;你的房贷是资产还是负债&#xff1f; 开篇&#xff1a;一个普通家庭的决策困境 深夜&#xff0c;东莞某小区的灯光次第熄灭。你刚刚哄睡一岁半的孩子&#xff0c;打开手机看到甲骨文最新一轮裁员的新闻&#xff0c;又瞥了一眼房…...

专业级音频编辑免费开源:Audacity 4.0 全面解析与使用指南

专业级音频编辑免费开源&#xff1a;Audacity 4.0 全面解析与使用指南 【免费下载链接】audacity Audio Editor 项目地址: https://gitcode.com/GitHub_Trending/au/audacity 还在为寻找一款功能全面、易于上手且完全免费的音频编辑软件而烦恼吗&#xff1f;是否曾经因…...

终极指南:如何用UniversalSplitScreen在一台电脑上玩多人游戏

终极指南&#xff1a;如何用UniversalSplitScreen在一台电脑上玩多人游戏 【免费下载链接】UniversalSplitScreen Split screen multiplayer for any game with multiple keyboards, mice and controllers. 项目地址: https://gitcode.com/gh_mirrors/un/UniversalSplitScree…...

Android Studio中文界面解决方案:从语言障碍到开发效率提升

Android Studio中文界面解决方案&#xff1a;从语言障碍到开发效率提升 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 当你在And…...

DeepStream-Yolo GPU加速原理深度解析:从ONNX到TensorRT的完整流程

DeepStream-Yolo GPU加速原理深度解析&#xff1a;从ONNX到TensorRT的完整流程 【免费下载链接】DeepStream-Yolo NVIDIA DeepStream SDK 8.0 / 7.1 / 7.0 / 6.4 / 6.3 / 6.2 / 6.1.1 / 6.1 / 6.0.1 / 6.0 / 5.1 implementation for YOLO models 项目地址: https://gitcode.c…...

ThinkPad风扇控制终极指南:5分钟告别噪音与过热烦恼

ThinkPad风扇控制终极指南&#xff1a;5分钟告别噪音与过热烦恼 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 你是否曾因ThinkPad风扇的"直升机起飞"声而烦…...

小白程序员看过来!TS同学半年逆袭AI大模型产品经理,收藏这份转行避坑指南!

TS同学从景观设计转行AI大模型产品经理的经历分享。他经历了离职、脱产学习、国企子公司项目被裁等波折&#xff0c;最终以20%薪资涨幅加入AI公司。文章重点介绍了他的心态调整、求职策略变化以及对“稳定”的新理解&#xff0c;同时探讨了AI时代教育孩子的思考。 本期嘉宾TS同…...

网盘直链解析工具终极指南:如何3分钟实现9大网盘下载加速

网盘直链解析工具终极指南&#xff1a;如何3分钟实现9大网盘下载加速 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…...

React极简表单库veyra-forms:轻量级、类型安全的表单状态管理方案

1. 项目概述&#xff1a;一个被低估的轻量级表单解决方案在Web开发的世界里&#xff0c;表单处理是个既基础又麻烦的活儿。从简单的联系表单到复杂的多步骤数据收集&#xff0c;开发者们总是在寻找一个平衡点&#xff1a;既要功能强大、易于集成&#xff0c;又要足够轻量、不拖…...

服务器电源线选购全攻略

5选服务器电源线&#xff0c;接口匹配、电流承载、安全认证、线缆长度、线材材质五大要点缺一不可&#xff0c;劣质线材容易过载发热、烧毁设备&#xff0c;严重还会引发火灾&#xff0c;机房布线一定要选用靠谱的睿阜高品质电源线。先对接口&#xff1a;物理适配是第一关键&am…...