C的文件操作

1.栈区上的空间运行效率很高

堆区分配的空间一般由程序员主动释放

静态区的话程序运行结束后由系统释放

2.根据数据的组织形式,数据文件被称为文本文件或者二进制文件

数据在内存中以二进制的形式存储,如果不加转换的输出到外存的文件中,就是二进制文件

如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。

而字符一律以ASCII形式存储,数值型数据既可以用ASCII形式存储,也可以使用二进制形式存储。

3.C语言程序在启动的时候,默认打开了3个流:
stdin-标准输入流,在大多数的环境中从键盘输入,scanf函数就是从标准输入流中读取数据。

stdout-标准输出流,大多数的环境中输出至显示器界面,printf函数就是将信息输出到标准输出流中

stderr- 标准错误流,大多数环境中输出到显示器界面。

这是默认打开了这三个流,我们使用scanf、printf等函数就可以直接进行输入输出操作的。stdin、stdout、stderr 三个流的类型是: FILE*,通常称为文件指针

C语言中,就是通过FILE*的文件指针来维护流的各种操作的。

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

第一个参数是文件名,第二个参数是打开方式

打开方式详细的图搜

fopen函数打开文件失败的话会返回一个空指针

所以在代码FILE* pf = fopen("文件路径","打开方式");后边要加上

if (pf == NULL)

{

perror("fopen");

return 1;

}

5.操作完文件后要记得关闭文件

int fclose( FILE *stream );文件

承接上边的代码:

fclose(pf);

pf = NULL;

6.

.表示当前目录

..表示上一级路径

例:

FILE* pf = fopen(".\\..\\exp.txt", "w");//注意这两个参数都得要是""

则会在当前编译器所运行的文件中的上一级文件夹里边打开exp.txt文件

FILE* pf = fopen(".\\..\\..\\exp.txt", "w");

这就在当前编译器所运行的文件中的上一级文件夹的上一级文件夹里边打开exp.txt文件

7.顺序读写函数介绍搜

其中的get是获取信息,即"读",一般参数都是一个:目标文件指针(用"r")

其中的put是写入信息,即"写",一般参数都是两个:"内容",目标文件指针(用"w")

其中的fpintf函数是用来写不同数据类型的数据的

其中的各个函数都可以搜得到

使用示例:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>struct stu 
{char name[20];int age;float score;
};int main()
{struct stu s = { "zhangsan", 18, 99.2f };FILE* pf = fopen("C:\\Users\\lucke\\Desktop\\data.txt", "w");if (pf == NULL){perror("fopen");return 1;}fprintf(pf, "%s %d %f", s.name, s.age, s.score);fclose(pf);pf = NULL;return 0;
}

8.注:    printf("%f", 99);//输出结果是0.000000

9.二进制写入:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>struct stu 
{char name[20];int age;float score;
};int main()
{struct stu s = { "zhangsan", 18, 99.3f};FILE* pf = fopen("C:\\Users\\lucke\\Desktop\\data.txt", "wb");if (pf == NULL){perror("fopen");return 1;}//二进制的形式写进去fwrite(&s, sizeof(s), 1, pf);fclose(pf);pf = NULL;return 0;
}

写到文本中的是zhangsan               殭艬

因为写进去的是二进制形式,所以要用二进制的形式读出来

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>struct stu
{char name[20];int age;float score;
};int main()
{struct stu s = { 0 };FILE* pf = fopen("C:\\Users\\lucke\\Desktop\\data.txt", "rb");if (pf == NULL){perror("fopen");return 1;}//二进制的形式读出来fread(&s, sizeof(s), 1, pf);printf("%s %d %f", s.name, s.age, s.score);fclose(pf);pf = NULL;return 0;
}

10.sprintf函数:把格式化的数据转化为字符串

int sprintf( char *buffer, const char *format [, argument] ... );

使用示例:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>struct stu
{char name[20];int age;float score;
};int main()
{struct stu s = { "zhangsan" , 18, 89.3f};char arr[200] = { 0 };sprintf(arr, "%s %d %f", s.name, s.age, s.score);printf("%s", arr);//输出结果是zhangsan 18 89.300003return 0;
}

sscanf函数:在字符串中读取格式化的数据

int sscanf( const char *buffer, const char *format [, argument ] ... );

使用示例:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>struct stu
{char name[20];int age;float score;
};int main()
{struct stu s = { "zhangsan" , 18, 89.3f};struct stu tem = { 0 };char arr[200] = { 0 };sprintf(arr, "%s %d %f", s.name, s.age, s.score);sscanf(arr, "%s %d %f", tem.name, &(tem.age), &(tem.score));printf("%s %d %f", tem.name, tem.age, tem.score);//输出结果是:zhangsan 18 89.300003return 0;
}

换句话说:sprintf函数是将后边的东西转换为字符串并放到第一个参数里边去

sscanf函数是将第一个参数里边的字符串转换为其他形式并放到后边的参数里边去

11.fseek函数可以重新确定文件操作时的光标位置

int fseek( FILE *stream, long offset, int origin );

第一个参数是文件指针,二是偏移量,三是偏移的起始位置

第三个参数有三种选择:

SEEK_SET---------文本的起始位置

SEEK_CUR--------文本现在的光标位置

SEEK_END--------文本的末尾位置

第二个参数可以是负数

使用示例:

文本里边放的是abcdefghi

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>int main()
{FILE* pf = fopen("C:\\Users\\lucke\\Desktop\\data.txt", "r");if (pf == NULL){perror("fopen");return 1;}int ch = 0;ch = fgetc(pf);printf("%c\n", ch);ch = fgetc(pf);printf("%c\n", ch);ch = fgetc(pf);printf("%c\n", ch);ch = fgetc(pf);printf("%c\n", ch);fseek(pf, -4, SEEK_CUR);ch = fgetc(pf);printf("%c\n", ch);ch = fgetc(pf);printf("%c\n", ch);
/* 输出为abcdab
*/fclose(pf);pf = NULL;return 0;
}

12.ftell函数返回文件指针相对于起始位置的偏移量

long ftell( FILE *stream );

例:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>struct stu
{char name[20];int age;float score;
};int main()
{FILE* pf = fopen("C:\\Users\\lucke\\Desktop\\data.txt", "r");if (pf == NULL){perror("fopen");return 1;}int ch = 0;ch = fgetc(pf);printf("%c\n", ch);ch = fgetc(pf);printf("%c\n", ch);ch = fgetc(pf);printf("%c\n", ch);ch = fgetc(pf);printf("%c\n", ch);int tem = ftell(pf);printf("%d\n", tem);//tem打印出来是4fclose(pf);pf = NULL;return 0;
}

13.所谓的偏移量好像就是字节数

14.rewind函数可以将光标移回初始点

void rewind( FILE *stream );

15.feof函数:

feof 的作用:当文件读取结束的时候,判断是读取结束的原因是否是: 遇到文件尾结束。
(1).文本文件读取是否结束,判断返回值是否为 EOF (fgetc),或者 NULL (fgets)

例如:

fgetc判断是否为 EOF(无论是读取到文件末尾还是读取失败,他都会返回EOF)

fgets判断返回值是否为 NULL(无论是读取到文件末尾还是读取失败,他都会返回NULL)

(2).二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。

例如:

fread判断返回值是否小于实际要读的个数。

16.feof函数:在文件读取结束后,判断是否是因为遇到文件末尾而结束(是遇到文件末尾而结束就返回真)

ferror函数:在文件读取结束后,判断是否是因为遇到错误而结束(是遇到错误而结束就返回真)

17.注;

代码if (!NULL):

中的!NULL是真

(因为NULL是0,!0即真)

18.有文件缓冲区这个东西

计算机从内存向磁盘输出的数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上

从磁盘向计算机输出的数据也会先送到内存中的缓冲区,装满缓冲区后才一起送到目的地上

刷新缓冲区也可以将缓冲区的内容放到目的地中

fflush函数可以刷新缓冲区,fclose函数也有刷新缓冲区的功能

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

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

相关文章

pintia6-2符号函数 6-1两点距离

pintia的函数题&#xff0c;只需要把函数写上去就可以了&#xff0c;6-2函数题比较简单&#xff0c;三个if就可以解决: 6-1则套用数学公式即可&#xff0c;注意把函数名复制粘贴过去&#xff0c;以免抄错

2024年华为OD机试真题-虚拟游戏理财-Java-OD统一考试(C卷)

题目描述: 在一款虚拟游戏中生活,你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。现有一家Bank,它提供有若干理财产品m,风险及投资回报不同,你有N(元)进行投资,能接受的总风险值为X。 你要在可接受范围内选择最优的投资方式获得最大回报。 说明: 在虚拟游戏中…

安装 kvm Qemu rocky8 linux

在基于 Red Hat 的 Linux 发行版&#xff08;如 CentOS 或 Rocky Linux&#xff09;上安装 KVM&#xff08;Kernel-based Virtual Machine&#xff09;&#xff0c;您需要遵循以下步骤&#xff1a; 检查 CPU 虚拟化支持&#xff1a; 确保您的 CPU 支持硬件虚拟化。您可以通过运…

网络加速工具

注册之后, 下载软件, 可免费试用4小时. 亲测可用, 网速还是很不错的 点击以下官网地址进行注册 https://tgjkdjfk.top/a.php?alavBTtF8UWAySC 或者 https://doveee.com/aff.php?alavBTtF8UWAySC 注册登录之后的个人中心 电脑端安装之后的界面如下 电脑端(macOS Windows)和手…

C#解决在Winform中绘图异常闪烁问题

1&#xff0c;问题描述: 在winform中使用Graphics进行绘图&#xff0c;绘图效果却呈现异常闪烁。 2&#xff0c;解决办法: 使用 SetStyle() 设置相应特性: SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦…

Redis常用数据类型--Hash

Hash 常用命令HSETHGETHEXISTSHDELHKEYS/HVALSHGETALLHMGETHLENHSETNXHINCRBY/HINCRBYFLOAT 内部编码典型应用场景 常用命令 HSET 设置 hash 中指定的字段&#xff08;field&#xff09;的值&#xff08;value&#xff09; HSET key field value [field value ...]时间复杂度…

Django的web框架Django Rest_Framework精讲(二)

文章目录 1.自定义校验功能&#xff08;1&#xff09;validators&#xff08;2&#xff09;局部钩子&#xff1a;单字段校验&#xff08;3&#xff09;全局钩子&#xff1a;多字段校验 2.raise_exception 参数3.context参数4.反序列化校验后保存&#xff0c;新增和更新数据&…

适用在Windows、Linux和macOS环境下打包Go应用程序的详细步骤和命令

在Go语言中&#xff0c;跨平台是一项强大的特性&#xff0c;使得开发者可以轻松地在不同操作系统上构建应用程序。然而&#xff0c;当我们需要分享或部署我们的Go应用时&#xff0c;通常需要将其打包成可执行文件&#xff0c;并确保在不同的操作系统上能够顺利运行。接下来将详…

起心动念 | 生成式 AI 开发实践系列的开端

生成式 AI 和大模型的技术变革力量&#xff0c;正在逐渐影响着我们当下这个时代&#xff0c;全球各行各业都呈现百舸争流、万象更新的趋势。在 2023 年&#xff0c;我们通过各种面向开发者的活动&#xff0c;收集到了大量开发者关于基于生成式 AI 的开发内容需求和建议反馈。开…

Boosting semantic human matting with coarse annotations

前向推理在modelscope中开源了&#xff0c;但是训练没开源&#xff0c;且是基于TensorFlow的&#xff0c;复现起来是比较麻烦的。 1.Introduction 分割技术主要集中在像素级二元分类&#xff0c;抠图被建模为前景图像F和背景图像B的加权融合&#xff0c;大多数matte方法采用指…

HiSilicon352 android9.0 开机视频调试分析

一&#xff0c;开机视频概念 开机广告是在系统开机后实现播放视频功能。 海思Android解决方案在原生Android基础上&#xff0c;增加了开机视频模块&#xff0c;可在开机过程中播放视频文件&#xff0c;使用户更好的体验系统开机过程。 二&#xff0c;模块结构 1. 海思自研开机…

面试 JavaScript 框架八股文十问十答第一期

面试 JavaScript 框架八股文十问十答第一期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;JavaScript有哪些…

Linux 高并发服务器

多进程并发服务器 使用多进程并发服务器时要考虑以下几点&#xff1a; 父进程最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符)系统内创建进程个数(与内存大小相关)进程创建过多是否降低整体服务性能(进程调度) server /* server.c */ #include <stdio…

IDEA反编译Jar包

反编译步骤 使用IDEA安装decompiler插件 找到decompiler插件文件夹所在位置&#xff08;IDEA安装路径/plugins/java-decompiler/lib &#xff09;&#xff0c;将需要反编译的jar包放到decompiler插件文件夹下&#xff0c;并创建一个空的文件夹&#xff0c;用来存放反编译后的…

电子信息考博目标院校

电子信息考博 1.目标院校 第一志愿 武汉大学 211计算机学院(2024年度) 085400电子信息 新一代信息通信技术&#xff08;卓工博士专项&#xff09; 外语水平考试科目 1101英语 卓工博士专项计划详见专项简章 212电子信息学院(2024年度) 085400电子信息 新一代信息通信…

AJAX-常用请求方法和数据提交

常用请求方法 请求方法&#xff1a;对服务器资源&#xff0c;要执行的操作 axios请求配置 url&#xff1a;请求的URL网址 method&#xff1a;请求的方法&#xff0c;如果是GET可以省略&#xff1b;不用区分大小写 data&#xff1a;提交数据 axios({url:目标资源地址,method…

【C语言】异常处理 | assert函数 | errno错误码

文章目录 C语言传统的处理错误的方式1. 终止程序&#xff08;例如使用 assert&#xff09;2. 返回/设置错误码手动实现C语言库函数内置的错误码Linux系统调用内置的错误码 C语言传统的处理错误的方式 C语言传统的处理错误的方式主要包括assert终止程序和返回或设置错误码两种方…

Django的web框架Django Rest_Framework精讲(三)

文章目录 1.DRF视图1) 视图基类1.GET请求2.POST请求&#xff0c;添加单条记录3.更新单条记录put方法4.DELETE请求 2) GenericAPIView[通用视图类] 2.视图类中使用多个序列化器类的方法3.基于视图扩展类的视图接口1&#xff09;ListModelMixin2&#xff09;CreateModelMixin3&am…

如何远程操控vm虚拟机(finalshell版)

你是否因为虚拟机命令行操作不便而头疼&#xff1f;是否因为难以复制粘贴而烦恼&#xff1f;是否因为无法快速上传文件而烦躁&#xff1f; 别急&#xff01;现在有一个简单便捷的软件能够实现上述你所述说的所有烦恼&#xff0c;请听我细细道来~ 一、查看虚拟机的ip地址 a.首…

python-分享篇-GUI界面开发-PyQt5-窗体代码与逻辑代码分离

代码 # _*_ coding:utf-8 _*_ # 文件名称&#xff1a;LoginWindows.py # 开发工具&#xff1a;PyCharmimport sys # 导入操作系统模块from PyQt5.QtCore import QCoreApplication # 导入PyQt5的QtCore模块 from PyQt5.QtWidgets import QApplication,QMainWindow # 导入P…