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

Should I fclose(file) if an error occured?

代码:

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()吗?

不,您不需要在 if 块内调用 fclose()。一旦 fopen() 失败,它会重新运行 NULL 不需要 closed.

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

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