【代码模板】C语言中fopen打开文件的12种权限?5个关键字?2类文件?(5个关键字rwa+b,b来区分是否二进制,+表示读写,wa不仅表示写表示操作模式)

快速回忆:
b 见b表示二进制方式打开,一般都用该种方式较好
w 见w表示覆盖写,会清空,不存在会创建。 所以一般不用r这种。
如果要追加用a
+表示读写
如果读写都要开不是rw,而是r+。也就是写不是w表示写。 wa表示写的两种方式 清空和追加。写的权限不用w表示,w主要特指清空。如此记忆比较方便

在C语言里,fopen函数用于打开文件,它的第二个参数是模式字符串,规定了文件的打开方式。
r表示读
w表示写
a表示追加方式打开,不存在会创建
r+表示读写方式打开,不存在会报错
w+表示读写方式打开,不存在会创建;存在会覆盖。
a+表示读写方式打开,写入会追加

w和a的区别在于a追加,w覆盖。
r必须存在。如果不存在自动创建用w或者a。如果不想清空用a。
带+表示读写都有。这里理解w的本质不是表示写,而是表示清空写。所以才有了+来表示读写,而不直接用rw。

带b的是处理二进制文件。
rb 必须存在
wb 存在则清空,不存在创建新的。
ab 追加 (同字符模式)
以及这些值带+,如上所述+表示读写都有,比如r的时候如果带+可以写入。wb和ab带+ 表示有读取的能力,也就是有对应的偏移指针。
rb+、wb+、ab+

1. 文本模式

  • r:以只读方式打开文本文件,文件必须存在。
#include <stdio.h>

int main() {
    FILE *fp = fopen("test.txt", "r");
    if (fp == NULL) {
        perror("文件打开失败");
        return 1;
    }
    // 使用文件
    fclose(fp);
    return 0;
}
  • w:以写入方式打开文本文件。若文件存在,内容会被清空;若文件不存在,则创建新文件。
#include <stdio.h>

int main() {
    FILE *fp = fopen("test.txt", "w");
    if (fp == NULL) {
        perror("文件打开失败");
        return 1;
    }
    fputs("Hello, World!", fp);
    fclose(fp);
    return 0;
}
  • a:以追加方式打开文本文件。若文件存在,写入的数据会添加到文件末尾;若文件不存在,则创建新文件。
#include <stdio.h>

int main() {
    FILE *fp = fopen("test.txt", "a");
    if (fp == NULL) {
        perror("文件打开失败");
        return 1;
    }
    fputs("Appended text", fp);
    fclose(fp);
    return 0;
}
  • r+:以读写方式打开文本文件,文件必须存在。
#include <stdio.h>

int main() {
    FILE *fp = fopen("test.txt", "r+");
    if (fp == NULL) {
        perror("文件打开失败");
        return 1;
    }
    // 读写操作
    fclose(fp);
    return 0;
}
  • w+:以读写方式打开文本文件。若文件存在,内容会被清空;若文件不存在,则创建新文件。
#include <stdio.h>

int main() {
    FILE *fp = fopen("test.txt", "w+");
    if (fp == NULL) {
        perror("文件打开失败");
        return 1;
    }
    fputs("New content", fp);
    rewind(fp);
    // 读取操作
    fclose(fp);
    return 0;
}
  • a+:以读写方式打开文本文件。若文件存在,写入的数据会添加到文件末尾;若文件不存在,则创建新文件。读写位置可以在文件任意处,但写入时总是追加到末尾。
#include <stdio.h>

int main() {
    FILE *fp = fopen("test.txt", "a+");
    if (fp == NULL) {
        perror("文件打开失败");
        return 1;
    }
    fputs("Appended content", fp);
    rewind(fp);
    // 读取操作
    fclose(fp);
    return 0;
}

2. 二进制模式

在文本模式的基础上,在模式字符串后面加上b,就成了二进制模式,用于处理二进制文件。

  • rb:以只读方式打开二进制文件,文件必须存在。
  • wb:以写入方式打开二进制文件。若文件存在,内容会被清空;若文件不存在,则创建新文件。
#include <stdio.h>

int main() {
    FILE *fp = fopen("test.bin", "wb");
    if (fp == NULL) {
        perror("文件打开失败");
        return 1;
    }
    int num = 123;
    fwrite(&num, sizeof(int), 1, fp);
    fclose(fp);
    return 0;
}
  • ab:以追加方式打开二进制文件。若文件存在,写入的数据会添加到文件末尾;若文件不存在,则创建新文件。
  • rb+:以读写方式打开二进制文件,文件必须存在。
  • wb+:以读写方式打开二进制文件。若文件存在,内容会被清空;若文件不存在,则创建新文件。
  • ab+:以读写方式打开二进制文件。若文件存在,写入的数据会添加到文件末尾;若文件不存在,则创建新文件。读写位置可以在文件任意处,但写入时总是追加到末尾。

这些模式参数能让你根据不同的需求对文件进行操作。在处理二进制文件时,一定要使用二进制模式,这样可以避免文本模式下可能出现的换行符转换等问题。

为了编一个C++词法分析器,你可以参考《C语言实现编译原理词法分析器实战》这一资源。词法分析器的核心任务是将源代码中的字符序列转换为一个个有意义的词法单元(tokens),这些包括标识符、关键字、字面量、运算符等。 参考资源链接:[C语言实现编译原理词法分析器实战](https://wenku.csdn.net/doc/5v3m555ds3?spm=1055.2569.3001.10343) 首先,你需要创建一个C语言程序,它能够打开用户指定的输入文件(通常是C++代码文件),并准备将分析结果输出到一个文件。使用`fopen`函数来打开文件,并使用标准输入输出函数`fgets`或`fgetc`来逐字符读取源代码。 在读取字符的过程中,你需要忽略空白字符,如空格、换行符和制表符,并对字母、数字和其他符号进行分类处理。可以使用状态机来处理不同的词法单元,例如标识符通常由字母或下划线开始,后面可以跟字母、数字或下划线;关键字是C++语言预先定义好的保留字。 对于标识符的识别,你可以使用一个字符数组来存储读取到的字母,然后使用二分查找算法在预定义的关键词列表中进行查找。如果没有找到匹配项,则将其视为用户定义的标识符。 当识别出一个词法单元时,需要将其类型(如标识符、关键字等)和值输出到输出文件中。确保你已经定义好了相应的数据结构来表示词法单元,以及用于输出的格式。 完成上述步骤之后,词法分析器就具备了基本的识别和分类功能。编这样的程序不仅能够加深你对编译原理的理解,还能够提升你使用C语言处理复杂文本的能力。若你希望深入学习和理解词法分析器的内部工作原理及其在编译器中的应用,继续参阅《C语言实现编译原理词法分析器实战》中的实战案例将非常有帮助。 参考资源链接:[C语言实现编译原理词法分析器实战](https://wenku.csdn.net/doc/5v3m555ds3?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值