c - fclose() 导致段错误

标签 c file-io segmentation-fault fopen fclose

我一直在尝试在 C 中进行简单的文件处理,我想确保可以尝试使用此文件访问该文件

#include<stdio.h>

main()
{
    CheckFile();
}

int CheckFile()
{
    int checkfile=0;

    FILE *fp1;
    fp1 = fopen("users.sav","r");

    if(fp1==NULL)
    {
        fopen("users.sav","w");
        fclose(fp1);
    }   
    if(checkfile!=0)printf("\nERROR ACCESSING FILE!\nNow exiting program with exit code: %d\n",checkfile);exit(1);
    return 0;
}

然后显示

Segmentation fault (core dumped)

但如果文件事先已经存在(例如,当我手动创建它或当我第二次运行程序时),它不会出现段错误

请帮忙。我需要这个用于我们一周后到期的最终项目,但我还没有掌握文件和指针的窍门。

我正在使用“gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1”

附言

我在另一个问题上看到的

There's no guarantee in your original code that the fopen is actually working, in which case it will return NULL and the fclose will not be defined behaviour.

那么我该如何检查它是否有效呢?

最佳答案

这很正常,当您在 fp1 为 NULL 时调用 fclose(fp1)

顺便说一句

fopen("users.sav","w");

是无用的,因为您没有将返回值分配给文件指针。这意味着将打开 users.sav 文件进行写入,但您将永远无法在其中写入任何内容。

关于c - fclose() 导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22506455/

相关文章:

c - 读取逗号分隔的输入 `scanf()`

比较 crc32 与 cksum c

java - 使用 JNA 从 java 中的内部源对象 (.so) 文件调用 C++ 函数时出现链接异常。

c - 如何在C中将多个结果打印到单个文本文件?

c++ - 将数据实时写入文件或在程序关闭时写入文件更好吗?

c - 在链表中,将最后一个节点与下一个元素进行比较会导致段错误吗?

c++ - 为什么在访问整数时缓冲区溢出会导致段错误?

c++ - 使用 C++ 从函数返回图像或视频文件的最佳方法是什么?

c - 为现有的 32 位代码添加 64 位支持,难吗?

c++ - 错误/var/tmp/kdecache 由 uid 1000 而不是 uid 0 拥有