C语言文件指针——空指针NULL

fp==NULL (是否为空指针的表达式)

在 C 语言中,文件操作依赖文件指针来进行。当使用 fopen 函数打开文件时,该函数会返回一个文件指针,它指向被打开文件的相关信息。如果文件成功打开,fopen 会返回一个有效的文件指针;若打开文件过程中出现问题,比如文件不存在、没有权限访问、磁盘空间不足等情况,fopen 就会返回一个空指针 NULL

fp == NULL 就是对文件指针 fp 是否为 NULL 进行判断,若条件为真(即 fp 等于 NULL),意味着文件打开失败;若条件为假(即 fp 不等于 NULL),则表明文件成功打开。

#include <stdio.h>

int main() {
    FILE *fp;
    // 尝试以只读模式打开一个不存在的文件
    fp = fopen("nonexistent_file.txt", "r");

    if (fp == NULL) {
        // 文件打开失败,输出错误信息
        perror("无法打开文件");
        return 1;
    }

    // 文件成功打开,进行后续操作
    // ...

    // 关闭文件
    fclose(fp);
    return 0;
}

举一个最近在赶的学生选课系统设计的例子

这是其中的一小部分

fp = fopen(COURSE_FILE, "rb");
if(fp == NULL) {
    // 创建默认课程
    Course default_courses[MAX_COURSE] = {
        {"C001", "C语言程序设计", 50, 0, 3},
        {"MATH", "高等数学", 100, 0, 4},
        {"ENG", "大学英语", 80, 0, 2},
        {"PHY", "大学物理", 60, 0, 3},
        {"CHEM", "大学化学", 60, 0, 3},
        {"PE", "大学体育", 120, 0, 1},
        {"ART", "艺术鉴赏", 100, 0, 2}
    };

    fp = fopen(COURSE_FILE, "wb");
    fwrite(default_courses, sizeof(Course), MAX_COURSE, fp);
    fclose(fp);
} else {
    fclose(fp);
}

这里先尝试以二进制只读模式(rb)打开课程文件 COURSE_FILE,若 fp == NULL,说明文件不存在,程序会创建默认课程数据并将其写入文件;若文件存在,就直接关闭文件。通过这种方式,程序能处理文件不存在的情况,保证系统正常运行。