【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.hqwc.cn/news/160213.html

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

相关文章

排序篇(六)----排序小结

排序篇(六)----排序小结 排序算法复杂度及稳定性分析 直接插入排序的算法复杂度&#xff1a; 最好情况下&#xff0c;当数组已经有序时&#xff0c;直接插入排序的时间复杂度为O(n)&#xff0c;其中n是数组的大小。最坏情况下&#xff0c;当数组逆序排列时&#xff0c;直接插…

selenium自动化测试入门 —— 定位frame和iframe中的元素对象

< frame> <iframe> 标签&#xff0c;浏览器会在标签中打开一个特定的页面窗口&#xff08;框架&#xff09;&#xff0c;它在本窗口中嵌套进入一个网页&#xff0c;当用selenium定位页面元素的时候会遇到定位不到frame框架内的元素的问题。 定位frame中的元素前我…

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

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

电路正负反馈,电压电流反馈,串并联反馈详细判别方法

正/负反馈&#xff1a;假设输出升高&#xff0c;转一圈回来仍使其升高就是正反馈&#xff0c;反之就是负反馈。作图法&#xff1a;在RL的信号端画一个向上的小箭头&#xff0c;沿着反馈环路&#xff0c;每经过一个元器件就画一个相应的箭头&#xff0c;一直画到放大器的输出端&…

DBeaver关闭代码的提示

在DBeaver中会遇到如下现象&#xff0c;很烦&#xff0c;怎么取消这个提示框呢&#xff1f; 解决方案&#xff1a;

antv/g6元素之combo

介绍 在 G6 中&#xff0c;“Combo” 是一种特殊的元素&#xff0c;用于组合和展示多个节点元素的一种方式。它通常用于表示一个组或子图&#xff0c;将多个相关节点组织在一起&#xff0c;并在图形中以单一的形状显示。 属性 type&#xff1a;Combo 的类型&#xff0c;通常是…

《python深度学习》笔记(二十):神经网络的解释方法之CAM、Grad-CAM、Grad-CAM++、LayerCAM

原理优点缺点GAP将多维特征映射降维为一个固定长度的特征向量①减少了模型的参数量&#xff1b;②保留更多的空间位置信息&#xff1b;③可并行计算&#xff0c;计算效率高&#xff1b;④具有一定程度的不变性①可能导致信息的损失&#xff1b;②忽略不同尺度的空间信息CAM利用…

​ iOS App Store上传项目报错 缺少隐私政策网址(URL)解决方法

一、问题如下图所示&#xff1a; ​ 二、解决办法&#xff1a;使用Google浏览器&#xff08;翻译成中文&#xff09;直接打开该网址 https://www.freeprivacypolicy.com/free-privacy-policy-generator.php 按照要求填写APP信息&#xff0c;最后将生成的网址复制粘贴到隐私…

BIOS开发笔记 - DDR中的时序参数

通过前一篇文章学习,我们可以大致知道内存条(Module)的组成及SDRAM内部的结构,这一篇再介绍下SDRAM中常见的时序参数以及整个读写操作的流程。 一、外部信号 图1 DDR4的外部线路图 DDR是一种高带宽的传输接口,其外部信号较多,图1是一个DDR4的外部线路图,以下对图中跟通…

Open3D(C++) 最小二乘拟合平面(间接平差法)

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 1、原理概述 通过传统最小二乘法对点云数据进行平面拟合时,可将误差只归因于一个方向上,本文假设误差只存在于 Z Z

Azure 机器学习 - 无代码自动机器学习的预测需求

了解如何在 Azure 机器学习工作室中使用自动化机器学习在不编写任何代码行的情况下创建时序预测模型。 此模型将预测自行车共享服务的租赁需求。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕…

linux中if条件判断,case...esac,function学习

第一、 if [ 判断式 ] ; then fi 注意&#xff1a;中括号和判断式之间的空格&#xff0c;否则会报错&#xff0c;上案例 第二个图的12行&#xff0c;中括号和条件判断如果没有空格&#xff0c;则会提示缺号‘】’&#xff0c;如第二个图最上面的提示。所以使用中括号的格式…