C 语言零基础入门教程(十九)

news2024/11/19 1:50:16

C 文件读写

上一章我们讲解了 C 语言处理的标准输入和输出设备。本章我们将介绍 C 程序员如何创建、打开、关闭文本文件或二进制文件。
一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备上的文件。本章将讲解文件管理的重要调用。

打开文件

您可以使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FILE 包含了所有用来控制流的必要的信息。下面是这个函数调用的原型:

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

在这里,filename 是字符串,用来命名文件,访问模式 mode 的值可以是下列值中的一个:
在这里插入图片描述
如果处理的是二进制文件,则需使用下面的访问模式来取代上面的访问模式:

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

关闭文件

为了关闭文件,请使用 fclose( ) 函数。函数的原型如下:

 int fclose( FILE *fp );

如果成功关闭文件,fclose( ) 函数返回零,如果关闭文件时发生错误,函数返回 EOF。这个函数实际上,会清空缓冲区中的数据,关闭文件,并释放用于该文件的所有内存。EOF 是一个定义在头文件 stdio.h 中的常量。

C 标准库提供了各种函数来按字符或者以固定长度字符串的形式读写文件。

写入文件

下面是把字符写入到流中的最简单的函数:

int fputc( int c, FILE *fp );

函数 fputc() 把参数 c 的字符值写入到 fp 所指向的输出流中。如果写入成功,它会返回写入的字符,如果发生错误,则会返回 EOF。您可以使用下面的函数来把一个以 null 结尾的字符串写入到流中:

int fputs( const char *s, FILE *fp );

函数 fputs() 把字符串 s 写入到 fp 所指向的输出流中。如果写入成功,它会返回一个非负值,如果发生错误,则会返回 EOF。您也可以使用 int fprintf(FILE *fp,const char *format, …) 函数把一个字符串写入到文件中。尝试下面的实例:

注意:请确保您有可用的 tmp 目录,如果不存在该目录,则需要在您的计算机上先创建该目录。
/tmp 一般是 Linux 系统上的临时目录,如果你在 Windows 系统上运行,则需要修改为本地环境中已存在的目录,例如: C:\tmp、D:\tmp等。

实例

#include <stdio.h>
 
int main()
{
   FILE *fp = NULL;
 
   fp = fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}

当上面的代码被编译和执行时,它会在 /tmp 目录中创建一个新的文件 test.txt,并使用两个不同的函数写入两行。接下来让我们来读取这个文件。

读取文件

下面是从文件读取单个字符的最简单的函数:

int fgetc( FILE * fp );

fgetc() 函数从 fp 所指向的输入文件中读取一个字符。返回值是读取的字符,如果发生错误则返回 EOF。下面的函数允许您从流中读取一个字符串:

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

函数 fgets() 从 fp 所指向的输入流中读取 n - 1 个字符。它会把读取的字符串复制到缓冲区 buf,并在最后追加一个 null 字符来终止字符串。

如果这个函数在读取最后一个字符之前就遇到一个换行符 ‘\n’ 或文件的末尾 EOF,则只会返回读取到的字符,包括换行符。您也可以使用 int fscanf(FILE *fp, const char *format, …) 函数来从文件中读取字符串,但是在遇到第一个空格和换行符时,它会停止读取。

实例

#include <stdio.h>
 
int main()
{
   FILE *fp = NULL;
   char buff[255];
 
   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1: %s\n", buff );
 
   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);
 
}

当上面的代码被编译和执行时,它会读取上一部分创建的文件,产生下列结果:

1: This
2: is testing for fprintf...

3: This is testing for fputs...

首先,fscanf() 方法只读取了 This,因为它在后边遇到了一个空格。其次,调用 fgets() 读取剩余的部分,直到行尾。最后,调用 fgets() 完整地读取第二行。

二进制 I/O 函数

下面两个函数用于二进制输入和输出:

size_t fread(void *ptr, size_t size_of_elements, 
             size_t number_of_elements, FILE *a_file);
              
size_t fwrite(const void *ptr, size_t size_of_elements, 
             size_t number_of_elements, FILE *a_file);

这两个函数都是用于存储块的读写 - 通常是数组或结构体。

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

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

相关文章

激光SLAM闭环方案总结

高质量的闭环是建图必不可少的元素之一。而激光SLAM不像视觉那样可以提供细致的纹理信息&#xff0c;因此常常出现误检和漏检的情况。最近&#xff0c;看了不少关于激光SLAM闭环方法的论文&#xff0c;总结一下。一、构建点云的描述子1、Scan Context&#xff08;2018&#xff…

抗抑郁药如何帮助细菌抵抗抗生素

谷禾健康 迄今为止最全面的全球抗菌素耐药性 (AMR) 研究发现&#xff0c;由耐药菌引起的感染是所有年龄段人群死亡的主要原因之一。 22年发表在《柳叶刀》杂志上的分析估计&#xff0c;2019 年有 495 万人死于细菌性 AMR 发挥作用的疾病。其中&#xff0c;127 万人死亡是 AMR 的…

如何使用matlab对时间序列进行ADF检验?|adftest函数(获取不同显著性下的统计结果)

ADF检验 迪基富勒检验&#xff08;ADF检验&#xff09;是一种常见的统计检验&#xff0c;用于检验给定时间序列是否平稳。在分析序列的平稳性时&#xff0c;它是最常用的统计检验之一。matlab中提供了函数adftest可以完成该检验&#xff0c;本文重点介绍该函数的用法。 Matla…

创建表和管理表

文章目录基础知识一条数据存储的过程标识符命名规则MySQL中的数据类型创建和管理数据库创建数据库使用数据库修改数据库删除数据库创建表创建方式1创建方式2查看数据表结构修改表追加一个列修改一个列重命名一个列删除一个列重命名表删除表清空表内容拓展拓展1&#xff1a;阿里…

setState的使用+React更新机制+events+受控和非受控组件

setState是异步更新 总结&#xff1a; 1.setState设计为异步&#xff0c;可以显著的提升性能 如果每次调用 setState都进行一次更新&#xff0c;那么意味着render函数会被频繁调用&#xff0c;界面重新染&#xff0c;这样效率是很低的&#xff1b;最好的办法应该是获取到多个更…

单片机开发---ESP32S3移植lvgl+触摸屏

书接上文 《单片机开发—ESP32-S3模块上手》 本章内容 熟悉一下ESP32S3的开发&#xff0c;修改范例程序的lvgl&#xff0c;使之能够匹配现在的显示屏。 具体工作大概为通过SPI接口连接一块SPI串口屏幕&#xff0c;并且适配lvgl&#xff0c;最后加上触摸屏作为输入。 屏幕 …

【计算机网络】第一章 计算机网络结构

文章目录第一章 体系结构1.1 计算机网络概述1.1.1 计算机网络的概念1.1.2 计算机网络的组成1.1.3 计算机网络的功能1.1.4 计算机网络的分类*1.1.5 计算机网络的标准化工作1.1.6 计算机网络的性能指标1.2 计算机网络体系结构与参考模型1.2.1 计算机网络分层结构1.2.2 计算机网络…

#8链表的中间结点#

链表的中间结点 1题目链接 链接 2思路 思路1:遍历一遍 计数 然后/2 再遍历一遍 思路2:slow fast指针 slow指针一次走1步 fast指针一次走2步 当fast为空的时候 slow的位置就是中间结点 奇数个: 1 2 3 4 5 fast走完第三次为空 slow走完第三次就是3 偶数个: 1 2 3 4 5 6 fast走完…

智慧型物业管理系统功能解析

随着当前社会经济的发展与科技发达&#xff0c;物业管理系统化已经成为常态了。尤其是随着智慧物业管理系统功能越来越多&#xff0c;人们对智慧物业管理系统的依赖就更明显了。毕竟系统真的可以给生活带来很多的便利之处&#xff1a; 业主可通过该系统查询自己住房的详细信息…

“揾”钱,最紧要系稳

我是腾讯安全的樊自磊。我们团队在腾讯主要负责金融风控产品&#xff0c;解决相关产品交付和服务维护工作&#xff0c;像国内知名大型国有银行、城商行、互联网金融公司等&#xff0c;都是我们的服务对象。今年春节&#xff0c;我和我的的同事们都在深圳为金融行业的网络安全进…

连续多输入多输出对象最优控制

连续多输入多输出对象最优控制 控制对象:平面二自由度机械臂 动力学模型: M ( q ) q + C ( q , q ) + G ( q ) =

【HDRP】自动生成的光照探针——Probe Volume

HDRP中&#xff0c;增加了Probe Volume&#xff0c;可代替旧版的光照探针Light Probe Group。 使用此功能的物体&#xff0c;不再需要光照贴图。 一、优缺点比较 详细说明可查看官方说明。 1.Probe Volume按像素而不是按对象发光&#xff0c;这意味着 HDRP 可以更准确地照亮…

软件著作权申请材料

(一)按要求填写的软件申请表; (二)软件的鉴别材料; 1、软件的操作手册&#xff1a;图文并茂的详细介绍软件的各功能&#xff0c;文档应不超过60页&#xff0c;超过60页应当删除中间内容&#xff0c;保留前后30页&#xff1b; 2、软件的源代码&#xff1a;每页不少于50行&…

Go第 15 章 :单元测试

Go第 15 章 &#xff1a;单元测试 15.1 先看一个需求 在我们工作中&#xff0c;我们会遇到这样的情况&#xff0c;就是去确认一个函数&#xff0c;或者一个模块的结果是否正确&#xff0c; 如&#xff1a; 15.2 传统的方法 15.2.1 传统的方式来进行测试 在 main 函数中&a…

k8s集群调度、亲和性、污点和容忍、pod状态、排障步骤

目录 一、调度约束 二、创建资源工作流程 三、Scheduler调度过程 1.Scheduler调度中考虑的问题 2.调度过程的步骤 3.预算策略&#xff08;predicate&#xff09;的常见算法 4.优选策略&#xff08;priorities&#xff09;的优先级 四、Pod 调度到指定Node节点 1.nodeNa…

微服务的服务拆分与远程调用

​ 哈喽大家好呀&#xff01;好久不见甚是想念&#xff0c;给大家拜个年啦~应该不晚吧(ಥ_ಥ) 放假在家确实是容易躺平&#xff0c;有心而无力呀哈哈哈哈。但是闲着也是闲着&#xff0c;最近学了学微服务相关知识&#xff0c;马上也快毕业了就更到抓紧了 今天我来说说关于微服…

医疗影像容积重建-物体坐标系和渲染图像坐标系

1 物体坐标系&#xff08;mm为单位&#xff0c;并三方向都是各向同性的情况)将所有数据的正中间&#xff08;这里所有的数据&#xff0c;是指各体素按照实际位置在空间排列&#xff09;&#xff0c;作为物体坐标系的原点&#xff0c;以图像的image orientation X方向&#xff0…

Android开机动画

1.动画的位置 android开机动画位置在/system/media目录下&#xff0c;/system/media/bootanimation.zip 解压是如下的文件内容 part0&#xff0c;part1&#xff0c;part2存放的都是要播放开机动画的帧图片&#xff0c;desc.txt写的是播放方式&#xff0c;desc文件内容类似如下…

天云数据Hubble数据库荣获2022年度IT168技术卓越奖

在2022年即将结束之际&#xff0c;IT168再次启动“技术卓越奖”评选。由行业CIO/CTO大咖、技术专家及IT媒体三方联合评选&#xff0c;评判标准代表了用户和媒体声音。经过多方评审&#xff0c;天云数据Hubble数据库荣获2022年度IT168技术卓越奖。 IT168主编任朝阳说&#xff1a…

SAP FICO 内部订单详细解析

内部订单 内部订单是用来对企业内部某项工作或者任务编制计划、归集成本、结算的载体。比如市场推广活动、内部团队活动、研发项目、投资项目、在建工程项目等。 内部订单需要区别于销售订单、采购订单和生产订单。 销售订单和采购订单是企业与外部单位以合同或者契约为纽带&…