C语言文件io操作

一、fopen

在C语言中,操作文件之前应该先打开文件。使用<stdio.h>头文件中的fopen()函数可以打开文件,因为FILE也是结构体,我们通过返回一个文件指针就可以对文件进行操作。在用完fopen之后要记得关闭该文件流。

用法:

FILE* fl = fopen("文件名","打开方式");

其中打开方式有:

 为了实现低耦合我们也可以这样写:

int main(int arg,char* argv[])
{FILE* fl = fopen(argv[1],"打开方式");fclose(fl);return 0;
}

因为在main函数中我们传入的是一个指向字符串的指针数组所以我们可以用argv[1]来表示传入的第二个字符串,一般我们Linux中第一个传入的参数是所要编译的文件,第二个才是所要操作的文件,所以可以这样写。这样我们就可以打开一个文件了,但是我们还没有对文件进行读写操作,所以控制台还不会有任何输出。

为了判断文件是否打开成功我们还可以用if语句进行判断一下:

int main(int arg,char* argv[])
{FILE* fl = fopen(argv[1],"打开方式");if(fl == NULL)
{perror("fopen error!\n");exit(0);
}fclose(fl);return 0;
}

如果fl打开失败则用函数perror打印一下,然后用exit(0)终止程序。注意:用exit()函数要加上include<stdlib.h>头文件 

二、fgetc

这个是最简单的读文件操作,这个函数用来从文件指针指向的文件中读一个字符,返回的值是读取的字符,如果发生错误则返回EOF

用法:

fgetc(文件指针);

int main()
{FILE* fl = fopen("test.txt","r");char ch = fgetc(fl);printf("%c",ch);fclose(fl);return 0;
}

在其中我们以只读的方式打开了文件test.txt,用fgetc()获取的fl指向文件的第一个字符,并把其赋值给了ch,假设我们test.txt文件内容是这样的:

abcd

则打印结果是:

 a

 三、fgets

与上面的fgetc()函数不同的是,fgets()函数是从一个文件中一次性读一行数据,并且它会把读取的字符串复制到缓冲区buf,并在最后追加一个null字符来终止字符串。

用法:

fgets(char *buf, int n, FILE* fl);

#define 10 SIZE
int main(int arg,char* argv[])
{FILE* fl = fopen(argv[1],"r");char buf[20];fgets(buf,SIZE,fl);fclose(fl);return 0;
}

 其中有两种情况:

1、当SIZE大于一行的字符串时,那么当读到字符串末尾的换行符时,fgets()会返回,并在buf的最后面插入字符串结束标志'\0'。而buf缓冲区剩余的位置不会再填充

2、当SIZE小于一行的字符串时,那么会读入n-1个字符,此时并没有读到末尾的'\n',但是还是会在buf缓冲区末尾加上'\0'

可以用while循环来输出fgets()函数读入的字符串

#define 10 SIZE
int main(int arg,char* argv[])
{FILE* fl = fopen(argv[1],"r");char buf[20];while(fgets(buf,SIZE,fl)!=NULL)
{printf("%s",buf);
}fclose(fl);return 0;
}

三、fputc

fputc是向指定的文件中写入一个字符

 用法:

fputc(int ch,FILE* fl);

其中ch为要写入的字符,fl为文件指针,fputc()写入成功时返回要写入的字符,失败时返回EOF

如:

#define 10 SIZE
int main(int arg,char* argv[])
{FILE* fl = fopen(argv[1],"a");char ch = 'a';fputc(ch,fl);fclose(fl);return 0;
}

注意:此时用的打开文件方式是a,a是往文件后面追加的意思,不会覆盖文件里面已有的内容,而用w的话就会覆盖掉文件里面已有的内容。

四、fputs

fputs()函数是将一行字符串写入到指定的文件中,但不包括空字符
用法:

fputs(char *str,FILE* fl);

 其中 str是要输入的字符串,fl是指向所要写入的文件的指针

#define 10 SIZE
int main(int arg,char* argv[])
{FILE* fl = fopen(argv[1],"打开方式");fputs("aabbcc",fl);fclose(fl);return 0;
}

其中将字符串aabbcc写入到了fl指向的文件中。

五、fscanf

fscanf函数是根据format格式从fl中读取数据,与fgets类似

int fscanf(FILE *fl, const char *format, [argument...]);

 其中fl是指向文件的指针,format是格式字符串,[argument...]是接收字符串的参数。fscanf()遇到空格、回车会断开,fgets遇到回车会断开

如:

#define 10 SIZE
int main(int arg,char* argv[])
{FILE* fl = fopen(argv[1],"r+");while(!feof(fl))
{char buf[10] = {0};fscanf(fl,%s,buf);printf("%s",buf);
}fclose(fl);return 0;
}

其中定义了一个buf缓冲区,将读取到的字符放到buf中,然后输出

六、fprintf

fprintf()函数用于向文件中输出格式化文本,与fputs类似

该函数类似于printf函数,只是printf将文本打印到命令窗口中,fprintf将文本输出到文件中

用法:

int fprintf (FILE* fl, const char*format, [argument...])

其中,fl为指向文件的指针,format为要写入格式,[argument]为可变参数。

 #include<stdio.h>#include<stdlib.h>int main(int arv,char *argv[]){FILE *fl = fopen(argv[1],"a");if(fl == NULL){perror("error!\n");exit(0);}char str[] = "abcdef";for(int i=0;i<6;i++){fprintf(fl,"buf[%d] = %c\n",i,str[i]);}fclose(fl);return 0;}

其中定义了一个字符串str,并用fprintf函数将该字符串以"buf[%d] = %c\n"格式输入到fl指向的文件中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/16199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【多模态】20、OVR-CNN | 使用 caption 来实现开放词汇目标检测

文章目录 一、背景二、方法2.1 学习 视觉-语义 空间2.2 学习开放词汇目标检测 三、效果 论文&#xff1a;Open-Vocabulary Object Detection Using Captions 代码&#xff1a;https://github.com/alirezazareian/ovr-cnn 出处&#xff1a;CVPR2021 Oral 一、背景 目标检测数…

Redis系列一:介绍

介绍 The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker. 相关资源 Redis 官网&#xff1a;https://redis.io/ 源码地址&#xff1a;https://github.com/redis/redis Redis 在线测试&#…

学习使用axios,绑定动态数据

目录 axios特性 案例一&#xff1a;通过axios获取笑话 案例二&#xff1a;调用城市天气api接口数据实现天气查询案例 axios特性 支持 Promise API 拦截请求和响应&#xff08;可以在请求前及响应前做某些操作&#xff0c;例如&#xff0c;在请求前想要在这个请求头中加一些…

springboot 整合tx-mybaits 实现crud操作

一 操作案例 1.1 工程结构 1.2 pom文件的配置 <!--spring boot的依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId…

【机器学习】Multiple Variable Linear Regression

Multiple Variable Linear Regression 1、问题描述1.1 包含样例的X矩阵1.2 参数向量 w, b 2、多变量的模型预测2.1 逐元素进行预测2.2 向量点积进行预测 3、多变量线性回归模型计算损失4、多变量线性回归模型梯度下降4.1 计算梯度4.2梯度下降 首先&#xff0c;导入所需的库 im…

Reinforcement Learning with Code 【Code 1. Tabular Q-learning】

Reinforcement Learning with Code 【Code 1. Tabular Q-learning】 This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiyu’s Mathematical Foundation o…

Windows 10 中无法最大化任务栏中的程序

方法1&#xff1a;仅选择选项 PC 屏幕 如果您使用双显示器&#xff0c;有时这可能会发生在您的 1 台计算机已插入但您正在访问的应用程序正在另一台计算机上运行的情况下&#xff0c;因此您看不到任何选项。因此&#xff0c;请设置仅在主计算机上显示显示的 PC 屏幕选项。 第…

搭建自己第一个golang程序

概念&#xff1a; golang 和 java有些类似&#xff0c;配置好环境就可以直接编写运行了&#xff1b;这里分两种&#xff1a; 一.shell模式 创建一个go类型的文件 往里面编写代码 二.开发工具模式 这里的开发工具 我选用goland package mainimport "fmt"func mai…

Ubuntu 20.04.4 LTS安装Terminator终端(Linux系统推荐)

Terminator终端可以在一个窗口中创建多个终端&#xff0c;并且可以水平、垂直分割&#xff0c;运行ROS时很方便。 sudo apt install terminator这样安装完成后&#xff0c;使用快捷键Ctrl Alt T打开的就是新安装的terminator终端&#xff0c;可以使用以下方法仍然打开ubuntu默…

【数据结构】实验四:循环链表

实验四 循环链表 一、实验目的与要求 1&#xff09;熟悉循环链表的类型定义和基本操作&#xff1b; 2&#xff09;灵活应用循环链表解决具体应用问题。 二、实验内容 题目一&#xff1a;有n个小孩围成一圈&#xff0c;给他们从1开始依次编号&#xff0c;从编号为1的小孩开…

Prometheus中的关键设计

1、标准先行&#xff0c;注重生态 Prometheus 最重要的规范就是指标命名方式&#xff0c;数据格式简单易读。比如&#xff0c;对于应用层面的监控&#xff0c;可以要求必须具备这几个信息。 指标名称 metric Prometheus 内置建立的规范就是叫 metric&#xff08;即 __name__…

ICMP协议(网际报文控制协议)详解

ICMP协议&#xff08;网际报文控制协议&#xff09;详解 ICMP协议的功能ICMP的报文格式常见的ICMP报文差错报文目的站不可达数据报超时 查询报文回送请求或回答 ICMP协议是一个网络层协议。 一个新搭建好的网络&#xff0c;往往需要先进行一个简单的测试&#xff0c;来验证网络…

小白到运维工程师自学之路 第六十集 (docker的概述与安装)

一、概述 1、客户&#xff08;老板&#xff09;-产品-开发-测试-运维项目周期不断延后&#xff0c;项目质量差。 随着云计算和DevOps生态圈的蓬勃发展&#xff0c;产生了大量优秀的系统和软件。软件开发人员可以自由选择各种软件应用环境。但同时带来的问题就是需要维护一个非…

spring-authorization-server (1.1.1)自定义认证

前言 注意&#xff1a;我本地没有生成公钥和私钥&#xff0c;所以每次启动项目jwkSource都会重新生成&#xff0c;导致之前认证的token都会失效&#xff0c;具体如何生成私钥和公钥以及怎么配置到授权服务器中&#xff0c;网上有很多方法自行实现即可 之前有个项目用的0.0.3的…

Vue(待续)

概念 一套用于构建用户界面的渐进式JavaScript框架 Vue可以自底向上逐层的应用&#xff1a; 简单应用:只需一个轻量小巧的核心库。 复杂应用:可以引入各式各样的Vue插件。 1.采用组件化模式&#xff0c;提高代码复用率、且让代码更好维护。 2.声明式编码&#xff0c;让编码人员…

【设计模式——学习笔记】23种设计模式——装饰器模式Decorator(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 生活案例咖啡厅 咖啡定制案例 装饰者模式介绍介绍出场角色 案例实现案例一&#xff08;咖啡厅问题&#xff09;类图代码实现咖啡样式拓展代码实现 案例二类图代码实现 装饰着模式在IO流源码的应用总结什么是父类和子类的一致性如何让自己和被委托对象有一致性 文章说明…

深度学习和神经网络

人工神经网络分为两个阶段&#xff1a; 1 &#xff1a;接收来自其他n个神经元传递过来的信号&#xff0c;这些输入信号通过与相应的权重进行 加权求和传递给下个阶段。&#xff08;预激活阶段&#xff09; 2&#xff1a;把预激活的加权结果传递给激活函数 sum :加权 f:激活…

【Linux】UDP协议

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《学会Linux》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录 &#x1f449;传输层&a…

Mysql的锁

加锁的目的 对数据加锁是为了解决事务的隔离性问题&#xff0c;让事务之前相互不影响&#xff0c;每个事务进行操作的时候都必须先加上一把锁&#xff0c;防止其他事务同时操作数据。 事务的属性 &#xff08;ACID&#xff09; 原子性 一致性 隔离性 持久性 事务的隔离级别 锁…

Python入门【__init__ 构造方法和 __new__ 方法、类对象、类属性、类方法、静态方法、内存分析实例对象和类对象创建过程(重要)】(十四)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…