解决文件读写需求

在学c语言的时候,我们学习对文件进行读和写,里面知识点比较复杂,今天小编就来详细地讲述一下。

1.C语言的文件类型

我们依照数据文件的存储形式把他们分为文本文件二进制文件

文本文件又称ASCII文件,里面的数据是字符的形式,在文件输入时通过ASCII码转化为二进制再送入内存,读写速度比较慢,优点是打印时方便,便于阅读和理解

二进制文件读写时不用进行转换,速度快,比文本文件节省空间。

2.文件读取状态怎么获取

在c语言读写每一个文件时,我们都需要获取一些信息,比如说文件的存储路径等

为了方便我们获取文件的读取状态,标准文件系统为每一个文件定义为结构体类型命名为FILE,这个结构体变量中包含了读取文件所需要的基本信息,它的定义包含在stdio.h的头文件中

3.文件的读写操作

想要对文件进行读写,就需要用到fopen函数,可以看成file open的简写。

fopen的调用格式:

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

上面的filename时你想要读写的文件名mode是你想要读写的方式

我给大家介绍一下读写的方式,然后给大家演示一下该如何读写

关于图片中的字符文件和二进制文件在读取时有什么不同,我先跟大家说,他们两个在调用时所使用的函数不同,后面我们还会详细道来。

小编跟大家着重讲一下“r”和“w”的用法,关于“r“,我们在输入文件名时,如果这个文件名不存在就无法读取,系统不会自动给你创建一个新的文件

但是如果你选择的读写方式是“w”,如果这个文件名不存在,那么系统就会给你自动创建一个新的文件,以你输入的文件命来命名。

这个创建的文件我们是可以查看到的

4.文件读取函数

在对文件进行读写操作时,如何输入和输出呢?C语言为大家提供了几种读写函数

我向大家一一演示函数的使用

int fputc ( int character, FILE * stream );

我刚刚自己测验了一下,发现这个函数的返回值竟然是我们要放进去字母的ASCII值。

int fgetc ( FILE * stream );

这个函数是从文件中取出一个字符

为了验证他是取第一个字符还是取最后一个字符,我多放一个字母进入文件,以便验证。

因为fgetc要在“r”的方式下才能进行读取,所以我们就可以先关闭文件,再选择“r”的读写方式,我们可以看到fetc返回的是第一个字符的ASCII值

int fputs ( const char * str, FILE * stream );

这个函数是用来把字符串传到文件里面的,系统会依据你给的地址去传字符,直到遇到’\0'

char * fgets ( char * str, int num, FILE * stream );

从文件中读取字符串,num表示你想要读取的数量,该函数可以从文件中读取n-1个字符,并把这些字符存入到指针str所指向的字符数组中,如果成功就会返回str的首地址,失败就返回NULL,需要注意的是,读取n-1个字符后会自动添加‘\0'

那到底读取的字符串是如何放到字符数组中的呢,是按照顺序放?还是直接覆盖第一个呢?

我们可以看到他是非常粗暴的哦,直接覆盖第一个位置开始接收,那如果我要读取的支付长度大于我给定数组的空间,那又会出现什么样的情形呢?

这个嘛猜一猜就能猜到,栈肯定溢出了,直接崩溃哈哈哈

在C语言中,fread()函数和fread()函数读写文件时需要采用二进制的形式,否则会出现问题

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

str是一个指针,代表写入数据的存放地址,size代表数据类型所占用的字节数,count代表读写大小为size的数据项的数量,stream为文件指针,指向要写入的文件

我们看到写入文件中的是一些我们看不懂的东西,可能是根据二进制文件翻译过来的吧,小编在想,是不是破译文件的时候就是要读懂这些东西啊,如果有懂得这一方面的,欢迎评论区留言

小编又好奇这个函数返回的是啥了又去试了一下,发现返回的是读取的size大小的数据个数

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

str是一个指针,代表读入数据的存放地址,size代表数据类型所占用的字节数,count代表读写大小为size的数据项的数量,stream为文件指针,指向要读取的文件

那么这个函数的返回值是什么就有待大家自己验证了

int fprintf ( FILE * stream, const char * format, ... );

fprintf能够实现文件的格式化输出,所谓格式化,就是我可以设定一种格式,然后按照这种格式把数据存进去

那个stdout是标准输出流,可以输出到我们的屏幕上.

int fscanf ( FILE * stream, const char * format, ... );

其中的参数和上面的fprintf的参数相同

谢谢大家!

  • 52
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZENG zhi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值