2015-09-19 120 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)'是未定義的行爲。但實際上我也找不到支持這種說法的方法。 –

相關問題