C语言基础入门48篇_47_C语言操作文件(文件操作函数、打开文件fopen()、关闭文件fclose()、fclose规范程序、野指针的定义为:指针地址存在,但是指针指向的是一个已经释放的资源)

本篇主要介绍c语言中对文件的打开关闭操作。

1. C语言文件操作函数

C标准库中提供了一系列的函数,来操作文件。因为C库函数做了这个中间层,屏蔽掉了操作系统上对于文件的不同处理。
在这里插入图片描述
关于文件的常见基本操作有:

  • 打开文件fopen():创建文件或打开文件载体(磁盘)中已有的文件
  • 关闭文件fclose():类似free,释放掉内存中与文件有关的动态资源
  • 读取文件fread():数据由文件载体(磁盘)到内存
  • 写入文件fwrite():数据由内存到文件载体(磁盘)

2. fopen:打开或创建文件


fopen的原型为: FILE *fopen( char *filename, char *mode );

它的两个参数:

  • filename:需要打开或者创建的文件的文件名
  • mode:相关属性,如只读、只写、是否新建等

我们通过写出一段FILE的程序查看VS对应下的函数原型

int main(int argc, char* argv[])
{
	FILE *pFile = nullptr;
}

跳转之后:FILE是_iobuf结构体变量

    typedef struct _iobuf
    {
        void* _Placeholder;
    } FILE;

其他版本VS中FILE的封装内容:
在这里插入图片描述

它的返回值,是一个指向FILE结构体的指针。FILE结构体,就是C库函数对文件的抽象封装,里面记录了文件各种信息。
不过我们不用了解FILE内部的细节,因为我们不会直接操作FILE结构体,而是通过FILE*指针以及各种C库函数去间接操作FILE结构体。

实例:

#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[])
{
    FILE* pFile = fopen("mytest.txt", "w");
    char szBuff[] = "helloworld";

    fwrite(szBuff, 1, strlen(szBuff), pFile);
    fclose(pFile);
    return 0;
}

运行结果:在源码的位置生成mytest.txt文件,内容为helloworld
在这里插入图片描述

2.1 fopen中的mode参数


fopen中的mode参数是一个字符串,可以是以下情况的选择:

  • r:只读方式打开,且文件必须已经存在,否则报错
  • w:以只写方式创建文件,如果文件已经存在,会先删除原有文件的内容
  • a:以附加方式打开文件,不会删除原有文件内容,而是默认将内容写在文件的末尾
  • r+:读写方式,与r类似,不会删除原有文件
  • w+:读写方式,与w类似,会删除原有文件
  • a+:附加及都方式

3. fclose:关闭文件,参数为一个指向FILE结构体的指针


fclose类似free的作用,告之C库函数可以关闭已经打开的文件,并回收相关资源。

下例为进行文件关闭的规范程序,在关闭之前判断是否为无效指针,之后设置指针为NULL,防止其称为野指针
野指针的定义为:指针地址存在,但是指针指向的是一个已经释放的资源

    //规范的关闭文件操作
    if (pFile != NULL)
    {
        fclose(pFile);
        //对指针进行赋值,否则可能造成野指针
        pFile = NULL;
    }

4. 学习视频地址: C语言操作文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

十月旧城

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

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

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

打赏作者

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

抵扣说明:

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

余额充值