2015-09-19 122 views
3

当我打开在C文件,我目前这样做:如果文件指针为空,我必须使用fclose()吗? (C)

int main() 
{ 
    FILE *f 
    f = fopen("employers.dat", "rb"); 
    if(f == NULL) 
    { 
     PUTS("can not open the file:\"employers.dat\""); 
     fclose(f); 
     exit(-1); 
    } 
    return 0; 
} 

是否有必要使用fclose如果指针是NULL

+1

如果存在** no **有效文件描述符,'fclose'如何知道要关闭哪个文件? – Olaf

回答

8

它不仅是必要使用fclose()fNULL,但你实际上应该援引fclose()fNULL

  1. 如果fNULL,然后将文件从未被打开,首先,所以它不需要任何闭幕。

  2. 即使文件在某种程度上需要关闭,该解决方案不可能涉及通过NULLfclose(),因为NULL参数进行绝对没有信息fclose()可以用它来找出关闭该文件。

  3. 我不确定fclose()是否包含用于检测并忽略传递给它的错误NULL参数的额外代码,但即使它的确如此,最好不要试图诱惑你的命运。

+0

与关闭NULL文件处理程序相关:http://stackoverflow.com/questions/16922871/why-glibcs​​-fclosenull-cause-segmentation-fault-instead-of-returning-error – vsoftco

+0

fclose()NULL指针是未定义的行为,如果你这样做的话,普通的实现只会使程序崩溃。 – nos

1

由于文件没有打开,因此不需要关闭文件。

+0

谢谢,我以为相同 –

+0

你可以节省空闲(空),但我找不到任何文件说,这是安全的做fclose(空)。 – BitTickler

+0

@BitTicker不,它不是。 'fclose(NULL)'是未定义的行为。但实际上我也找不到支持这种说法的方法。 –

相关问题