代码:
FILE *fp = fopen(filename, "r");
if (!fp)
{
fprintf(stderr, "Failed to open a filen");
// fclose(fp) <-- should I close file here?
exit(1);
}
// Some operations on the file.
fclose(fp);
问题:
如果fopen()
无法打开文件,我还应该调用fclose()
吗?
不,您不需要在if
块内调用fclose()
。一旦fopen()
失败,它将重新运行NULL,而不需要关闭。
更详细地说,如果fopen()
成功,它将返回一个FILE *
。这需要关闭。FWIW,在这种情况下返回的指针,无论值为,都保证与NULL进行比较。换句话说,如果fopen()
成功,则返回的指针将始终FAILif(!fp)
检查。
在错误情况下(当由于某些原因而无法操作文件时(,将重试NULL。NULL返回值意味着文件未打开。您不能关闭尚未打开的内容。易于理解的