如果发生错误,我应该fclose(文件)吗?

Mat*_*ski 2 c file-io fopen file fclose

码:

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);
Run Code Online (Sandbox Code Playgroud)

题:

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

Sou*_*osh 5

不,你不需要调用fclose()内部if块.一旦fopen()失败,它将重新运行NULL,无需关闭.

详细说明,如果fopen()是成功,它将返回一个FILE *.这需要关闭.FWIW,在这种情况下返回的指针,具有任何,保证比较不等于NULL.换句话说,如果fopen()是成功的,返回的指针总是会失败if(!fp)检查.

在错误情形中(当由于某种原因无法选择文件时),将重新使用NULL.NULL返回值表示文件打开.您没有关闭尚未打开的内容.简单.

  • 我会说更清楚:因为返回错误null,你没有什么可以关闭. (2认同)