【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;这个数值就是你右击后…

OpenHarmony:4.0 Release版本的开发数据

OpenAtom OpenHarmony 4.0 Release版本于 10 月 27 日发布&#xff0c;经过了32周的开发周期。在此期间&#xff0c;有 65499 个 Committs 进入了 版本。在这个周期内完成了相当多的重要工作&#xff0c;本文阐释这些工作由谁完成。 这次共有 2220 位贡献者为 4.0 Release版本做…

【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;最后&…

模型推理加速与部署梳理

推理加速与部署 文章目录 推理加速与部署服务级别的推理加速模型级别的推理加速量化图优化 kernel级别的推理加速GPU常见优化方式特殊Kernel的优化方式 推理框架可供学习的框架 最近学的有点杂&#xff0c;梳理一下我的个人体系&#xff0c;接下来我会花一定时间梳理下面这些东…

【大数据】-- flink kubernetes operator 入门与实践

课程链接:https://edu.csdn.net/course/detail/38831 目录 课程链接:https://edu.csdn.net/course/detail/38831https://edu.csdn.net/course/detail/38831 一、你将收获

[论文笔记]RetroMAE

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

渲染流程之光栅化阶段及像素处理阶段

Rasterization 光栅化阶段&#xff1a;图元转换为像素&#xff0c;生成片段。 定义 把物体的数学描述以及与物体相关的信息转换为屏幕上用于对应位置的像素及用于填充像素的颜色这个过程成为光栅化 主要工作&#xff1a; 将得到的新图元&#xff08;添加额外的Virtex和计算图…

【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;案例中使用了嵌…

leetcode 2916. 子数组不同元素数目的平方和 II(区间更新 + 区间查询 线段树第二个板子 双闭区间 避开0)

描述 偷了一个线段树板子 不知道为啥要避开0 然后这里的更新和查找都是用双闭区间的 ac code class SegmentTree:def __init__(self, n):self.n n self.B1 [0]*n self.B2 [0]*n def add(self, b, idx, x):N self.n while idx < N:b[idx] xidx idx & -idxdef ra…

C++分治算法-------木材加工

木材厂有n根原木&#xff0c;现在想把这些木头切割成 k 段长度均为 l 的小段木头&#xff08;木头有可能有剩余&#xff09;。 当然&#xff0c;我们希望得到的小段木头越长越好&#xff0c;请求出的最大值。 木头长度的单位是cm&#xff0c;原木的长度都是正整数&#xff0c…

uniapp阻止冒泡的方法,点击事件嵌套点击事件,怎么阻止同时触发

uniapp阻止冒泡的方法 当我们遇到点击事件嵌套点击事件的时候&#xff0c;点击里边的事件&#xff0c;外边的也会跟着触发该怎么办&#xff1f; 起初我尝试用了css里的修改z-index属性的方法&#xff0c;把里边的<view>标签放在上边&#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;第三部分是问题详解。 …