You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中读取不存在文件时避免段错误并正确处理?

问题原因与修复方案

你的段错误根源在于:当文件不存在时,fopen返回NULL,但你后续仍然执行了fclose(thefile)——对NULL指针调用fclose会直接触发内存访问错误,也就是段错误。

修复后的代码

#include <stdio.h>
char file[100];
FILE* thefile;
int main(){
        thefile = fopen("what.txt", "r");
        if (thefile == NULL){
                printf("No File");
        } else {
                fgets(file, 100, thefile);
                printf("%s", file);
                fclose(thefile); // 仅在文件成功打开时关闭
        }
        return 0;
}

关键注意事项

  • 只有当fopen成功(返回值非NULL)时,才能调用fclose,否则会引发未定义行为。
  • fopen返回NULL不一定只是文件不存在,也可能是没有读取权限、路径错误等原因,若需要更精准的错误提示,可以用perror函数打印系统错误信息:
    if (thefile == NULL){
            perror("Failed to open file");
            return 1; // 异常退出,返回非0状态码
    }
    
  • 如果你只是想提前检查文件是否存在(不打开),可以用access函数(适用于POSIX系统):
    #include <unistd.h> // 需要包含这个头文件
    if (access("what.txt", R_OK) == -1) {
            printf("File doesn't exist or no read permission\n");
    } else {
            // 再执行打开读取逻辑
    }
    

内容的提问来源于stack exchange,提问作者wtry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:53:14