【问题标题】:Should I fclose(file) if an error occured?如果发生错误,我应该 fclose(file) 吗?
【发布时间】:2015-05-29 16:14:50
【问题描述】:

代码:

FILE *fp = fopen(filename, "r");
if (!fp)
{
    fprintf(stderr, "Failed to open a file\n");
    // fclose(fp) <-- should I close file here?
    exit(1);
}
// Some operations on the file.
fclose(fp);

问题:

如果fopen() 无法打开文件,我还应该调用fclose()吗?

【问题讨论】:

    标签: c file file-io fopen fclose


    【解决方案1】:

    不,您不需要在 if 块内调用 fclose()。一旦fopen() 失败,它会返回不需要关闭的NULL。

    详细来说,如果fopen() 成功,它将返回一个FILE *。那需要关闭。 FWIW,在这种情况下返回的指针,可以是任何 ,保证将不相等与 NULL 进行比较。换句话说,如果fopen() 成功,则返回的指针将始终FAIL if(!fp) 检查。

    在错误情况下(当文件因一些原因而无法打开时),NULL 将被返回。 NULL 返回值表示文件打开。您不会关闭尚未打开的内容。很简单。

    【讨论】:

    • 我知道 fopen() 返回 NULL 但我不确定文件是否已打开。谢谢!
    • 我想说得更清楚:因为返回错误 null ,你没有什么可以关闭的。
    • 一个悬而未决的问题:可以拨打fclose(NULL)吗?我认为是,但看不到要备份的规范。 (注:回答中的 2 个“返回”)
    • 我刚刚测试了fclose(NULL)。没有什么特别的事情发生。
    猜你喜欢
    • 1970-01-01
    • 2022-10-23
    • 2019-05-08
    • 2013-01-27
    • 2016-06-30
    • 2014-04-28
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多