【C语法学习】15 - fopen()函数

文章目录

  • 1 函数原型
  • 2 返回值
  • 3 参数
    • 3.1 文件名
    • 3.2 模式
      • 3.2.1 以"r"模式打开
      • 3.2.2 以"w"模式打开
      • 3.2.3 以"a"模式打开
      • 3.2.4 以"r+"模式打开
      • 3.2.5 以"w+"模式打开
      • 3.2.6 以"a+"模式打开

1 函数原型

fopen():创建并打开与文件相关联的文件流,函数原型如下:

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

2 返回值

fopen()的返回值类型是一个指向FILE类型的指针,FILE是个结构:

  1. 打开文件成功,则创建一个FILE类型结构的实例,并返回指向该结构实例的指针,程序使用该指针来操作文件;
  2. 打开文件失败,则返回NULL;导致文件打开失败的原因有很多,如:
    (1)使用无效的文件名;
    (2)试图在未准备好的磁盘上打开文件(如磁盘未格式化);
    (3) 文件的目录或盘符不存在;
    (4) 以"r"和"r+"模式打开并不存在的文件。

3 参数

fopen()函数有两个参数:文件名(filename)和模式(mode)。

3.1 文件名

一个文件需要有唯一确定的文件名,以便用户根据文件名找到唯一确定的文件,方便用户对文件的识别和引用。

文件名由三部分组成,文件路径+文件名主干+文件扩展名,如下图所示:

例如:c:\data\list.txt1. 文件路径:"c:\data\";
2. 文件名:"list";
3. 文件扩展名:".txt";注意:
4. 使用反斜杠'\'来分隔文件路径中的目录名;
5. C程序中,文件名以字符串的形式存储;
6. C程序中,反斜杠'\'被用作转义字符,标志着转义序列的开始;
7. C程序中,需要用两个反斜杠"\\"来表示文件路径中的目录分隔符'\',如"c:\\data\\list.txt";当从键盘输入文件名时,只需键入一个反斜杠'\';
8. C程序中,路径可省略,此时默认待打开的文件和当前C程序位于同一个目录下;

3.2 模式

模式指定以何种方式打开文件。具体而言,模式控制打开的是文本文件还是二进制文件,是以只读方式打开,只写方式打开。还是读写的方式打开。

以打开文本文件为例,不同打开模式的含义如下图所示:

在这里插入图片描述

当打开二进制文件时,模式为rb、wb、ab、rb+、wb+和ab+,模式的含义都一样。

3.2.1 以"r"模式打开

以"r"模式打开文件"1.txt",代码如下图所示:

int main()
{FILE* fp = NULL;if ((fp = fopen("1.txt", "r")) == NULL){printf("Failed to open file in \"r\" mode.\n");exit(1);}else{printf("Success to open file in \"r\" mode.\n");fclose(fp);}return 0;
}

当文件不存在时,在"r"模式下,打开文件失败,代码运行结果如下图所示:
在这里插入图片描述

当文件存在时,在"r"模式下,打开文件成功,代码运行结果如下图所示:
在这里插入图片描述

3.2.2 以"w"模式打开

以"w"模式打开文件"2.txt",代码如下图所示:

int main()
{FILE* fp = NULL;if ((fp = fopen("2.txt", "w")) == NULL){printf("Failed to open file in \"w\" mode.\n");exit(1);}else{printf("Success to open file in \"w\" mode.\n");for (int i = 0; i < 10; i++){fputc('2', fp);}fclose(fp);}return 0;
}

当文件不存在时,在"w"模式下,创建新文件,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

当文件存在时,在"w"模式下,清空现有文件,修改代码往文件中写入5个a,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

3.2.3 以"a"模式打开

以"a"模式打开文件"3.txt",代码如下图所示:

int main()
{FILE* fp = NULL;if ((fp = fopen("3.txt", "a")) == NULL){printf("Failed to open file in \"w\" mode.\n");exit(1);}else{printf("Success to open file in \"w\" mode.\n");for (int i = 0; i < 10; i++){fputc('3', fp);}fclose(fp);}return 0;
}

当文件不存在时,在"a"模式下,创建新文件,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

当文件存在时,在"a"模式下,新数据被附加至现有文件末尾,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

3.2.4 以"r+"模式打开

以"r+“模式打开文件"4.txt”,代码如下图所示:

int main()
{FILE* fp = NULL;if ((fp = fopen("4.txt", "r+")) == NULL){printf("Failed to open file in \"r+\" mode.\n");exit(1);}else{printf("Success to open file in \"r+\" mode.\n");for (int i = 0; i < 10; i++){fputc('4', fp);}fclose(fp);}return 0;
}

当文件不存在时,在"r+"模式下,打开文件失败,代码运行结果如下图所示:
在这里插入图片描述

当文件存在时,在"r+"模式下,新数据从头开始覆盖现有文件数据,文件初始内容为20个b,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

3.2.5 以"w+"模式打开

以"w+“模式打开文件"5.txt”,代码如下图所示:

int main()
{FILE* fp = NULL;if ((fp = fopen("5.txt", "w+")) == NULL){printf("Failed to open file in \"w+\" mode.\n");exit(1);}else{printf("Success to open file in \"w+\" mode.\n");for (int i = 0; i < 10; i++){fputc('5', fp);}fclose(fp);}return 0;
}

当文件不存在时,在"w+"模式下,创建新文件,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

当文件存在时,在"w+"模式下,清空现有文件,修改代码往文件中写入5个c,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

3.2.6 以"a+"模式打开

以"a+“模式打开文件"6.txt”,代码如下图所示:

int main()
{FILE* fp = NULL;if ((fp = fopen("6.txt", "a+")) == NULL){printf("Failed to open file in \"a+\" mode.\n");exit(1);}else{printf("Success to open file in \"a+\" mode.\n");for (int i = 0; i < 10; i++){fputc('6', fp);}fclose(fp);}return 0;
}

当文件不存在时,在"a+"模式下,创建新文件,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

当文件存在时,在"a+"模式下,新数据被附加至现有文件末尾,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

右击显示Pycharm打开教程

效果图 操作流程 win r 输入 regedit 回车打开注册表编辑器 2.找到 shell 路径 计算机\HKEY_CLASSES_ROOT\Directory\shell3.在 shell 下新建项&#xff0c;名称为 Pycharm 单击Pycharm文件夹&#xff0c;双击默认项&#xff0c;修改默认值&#xff0c;这个数值就是你右击后…

【Linux】 shutdown 命令使用

shutdown 命令可以用来进行关机程序&#xff0c;并且在关机以前传送讯息给所有使用者正在执行的程序&#xff0c;shutdown 也可以用来重开机。使用权限&#xff1a;系统管理者。 语法 shutdown [选项] 时间 [警告信息] 命令选项及作用 执行令 man shutdown 执行命令结果 参…

计算虚拟化2——内存虚拟化

目录 物理机内存访问过程 虚拟地址VA和物理地址PA概念 MUU实现VA到PA所使用的映射表 内存虚拟化类型 内存软件辅助虚拟化 内存硬件辅助虚拟化 内存虚拟化-内存超分配 内存共享 内存置换 内存气泡 物理机内存访问过程 内存的基本知识 内存都是从物理地址0开始的&…

golang工程——opentelemetry简介、架构、概念、追踪原理

opentelemetry 简介 OpenTelemetry&#xff0c;简称OTel&#xff0c;是一个与供应商无关的开源可观测性框架&#xff0c;用于检测、生成、收集和导出 遥测数据&#xff0c;如轨迹、度量、日志。OTel的目标是提供一套标准化的供应商无关SDK、API和工具&#xff0c;用于接 收、…

阿里云免费服务器

文章目录 最近的阿里云活动By the way在云服务器ECS上搭建个人网站正文补充:定期释放补充:不知道阿里云服务器的密码怎么办?成果补充&#xff1a;怎么找到实例操作的后台&#xff1f;补充&#xff1a;怎么查看服务器到期时间&#xff1f; 究竟白嫖了多少&#xff1f;最后&…

[论文笔记]RetroMAE

引言 RetroMAE,中文题目为 通过掩码自编码器预训练面向检索的语言模型。 尽管现在已经在许多重要的自然语言处理任务上进行了预训练,但对于密集检索来说,仍然需要探索有效的预训练策略。 本篇工作,作者提出RetroMAE,一个新的基于掩码自编码器(Masked Auto-Encoder,MAE)…

【leetcode】17.04 消失的数字

目录 1. 思路2. 代码 题目链接&#xff1a;leetcode 17.04.消失的数字 题目描述&#xff1a; 1. 思路 要求算法复杂度为O(n)&#xff0c;有两种方式&#xff1a; &#xff08;1&#xff09;利用异或交换律 与nums所有元素异或一遍&#xff1b;与0-n的值异或&#xff0c;n…

开源 | 30余套STM32单片机、嵌入式Linux、物联网、人工智能项目(开发板+教程+视频)

文末免费领取&#xff01; 30余套综合项目案例 STM32单片机、嵌入式、物联网、人工智能 项目文档源码视频 高校教学、学生毕设、个人项目练手 嵌入式实战项目推荐 15个嵌入式LinuxQt综合应用项目&#xff0c;涉及家居、医疗、农业等多种应用领域&#xff0c;案例中使用了嵌…

Linux高级命令(扩展)二

一、Linux下用户管理 1、用户概念以及基本作用 用户&#xff1a;指的是Linux操作系统中用于管理系统或者服务的人 一问&#xff1a;管理系统到底在管理什么&#xff1f; 答&#xff1a;Linux下一切皆文件&#xff0c;所以用户管理的是相应的文件 二问&#xff1a;如何管理…

【自用】vmware workstation建立主机window与虚拟机ubuntu之间的共享文件夹

1.在windows中建立1个文件夹 在vmware中设置为共享文件夹 参考博文&#xff1a; https://zhuanlan.zhihu.com/p/650638983 2.解决&#xff1a; &#xff08;1&#xff09;fuse: mountpoint is not empty &#xff08;2&#xff09;普通用户也能使用共享目录 参考博文&#x…

大模型 其他方案的进度

Llama2 1、中文提问&#xff0c;英文的回答&#xff0c;对于中文不友好 2、网上还没有看到很详细的微调教程 3、虽然Llama2的预训练数据相对于第一代LLaMA扩大了一倍&#xff0c;但是中文预训练数据的比例依然非常少&#xff0c;仅占0.13%&#xff0c;这也导致了原始Llama2的中…

多模态大模型最全综述

由微软7位华人研究员撰写--多模态基础模型已经从专用走向通用 它从目前已经完善的和还处于最前沿的两类多模态大模型研究方向出发&#xff0c;全面总结了五个具体研究主题&#xff1a; 视觉理解视觉生成统一视觉模型LLM加持的多模态大模型多模态agent 1、谁适合阅读这份综述&…

Vue3问题:如何实现组件拖拽实时预览功能?

前端功能问题系列文章&#xff0c;点击上方合集↑ 序言 大家好&#xff0c;我是大澈&#xff01; 本文约3000字&#xff0c;整篇阅读大约需要5分钟。 本文主要内容分三部分&#xff0c;第一部分是需求分析&#xff0c;第二部分是实现步骤&#xff0c;第三部分是问题详解。 …

运维基础-Docker容器命令部署

Docker基础知识 安装问题-有podmanCentos8使用yum install docker -y时&#xff0c;默认安装的是podman-docker软件安装docker yum list installed | grep dockeryum -y remove xxxxDocker安装配置下载安装docker启动docker&#xff0c;并设置开机启动下载所需镜像 centos镜像进…

【报错】错误 C1004 :发现意外的文件尾

文章目录 情景在现出错原因解决方案问题解决 情景在现 出错原因 这个错误通常是由于您在源文件中漏写了某些括号或者分号&#xff0c;导致编译器在处理到文件末尾时发现没有遇到预期的符号。 解决方案 解决这个错误的方法是&#xff0c;打开您的源文件&#xff0c;仔细检查是否…

EMC Unity存储系统如何查看SSD的使用寿命

为什么要写这个博客&#xff1f; 客户对老的EMC unity的存储系统要扩容&#xff0c;如何确定SSD磁盘是全新的还是拆机二手的&#xff1f;很多时候客户还有一个奇葩的要求&#xff0c;就是要和5年前的磁盘PN一致&#xff0c;甚至要求固件版本一致&#xff0c;最关键的还要求是全…

大数据(十):数据可视化(二)

专栏介绍 结合自身经验和内部资料总结的Python教程&#xff0c;每天3-5章&#xff0c;最短1个月就能全方位的完成Python的学习并进行实战开发&#xff0c;学完了定能成为大佬&#xff01;加油吧&#xff01;卷起来&#xff01; 全部文章请访问专栏&#xff1a;《Python全栈教…

Redis Sentinel 哨兵模式

Sentinel 哨兵模式 Redis Sentinel 官网 Redis 的 Sentinel 文档 -- Redis中国用户组&#xff08;CRUG&#xff09; Sentinel Redis 命令参考&#xff08;红色&#xff09; Sentinel 通过监控的方式获取主机的工作状态是否正常&#xff0c;当主机发生故障时&#xff0c; Senti…

校验验证码是否过期(定时刷新验证码)

需求&#xff1a; 我们在登录的时候会遇到通过接口请求验证码的操作&#xff0c;这里的验证码会有过期的时间&#xff0c;当我们验证码过期了&#xff0c;我们要进行重新刷新验证码。 我们这里根据后端返回的当前时间和过期时间判断&#xff0c;过期的时间超过了当前时间的时候…

vuepress使用及拓展(骚操作)

官网 文章目录 背景问题思考方案思索实现方案实现结果存在问题 背景 当前开放平台文件静态保存在前端项目&#xff0c;每次修改都需要通过修改文件发版的方式&#xff0c;很不便利。 1、需要前端手动维护 2、每次小的修改都要发版 随着对接业务的增多&#xff0c;对接文档的变…