我想知道文件關閉後FILE指針會發生什麼。它會是NULL嗎?文件關閉後FILE指針會發生什麼?
基本上,我想在關閉文件之前檢查一個文件是否已經關閉。
舉例如下:
FILE *f;
if(f!=NULL)
{
fclose(f);
}
我能做到這一點,還是有其他的路要走呢?
我想知道文件關閉後FILE指針會發生什麼。它會是NULL嗎?文件關閉後FILE指針會發生什麼?
基本上,我想在關閉文件之前檢查一個文件是否已經關閉。
舉例如下:
FILE *f;
if(f!=NULL)
{
fclose(f);
}
我能做到這一點,還是有其他的路要走呢?
由於參數是按值傳遞的,所以沒有辦法fclose
可以將文件指針設置爲NULL
。由於fclose
可能破壞FILE
你必須
fclose
(如果你關閉它在不同的功能unles您使用FILE **
將無法正常工作)NULL
最終在一個情況下,你「忘記」無論你將其關閉或沒有(可能是棘手)FILE *這是一個指向文件的指針結構,當你調用FCLOSE(),它會破壞/免費FILE結構但不會改變FILE *指針的值意味着它仍然具有那個現在不存在的FILE結構的地址。
同樣的事情與任何指針使用malloc
int a malloc(10);
free(a);
仍然得到happem一個不會在大多數情況下,NULL
我總是做這樣的事情
free(a);
a=NULL;
編輯:你不能隨時檢查它是否已關閉/釋放。只是爲了確保您可以在free/fclose之後將它分配爲NULL,以便您可以檢查其是否爲NULL並繼續。
是的,您可以這樣做。更好的方法是設置fp
到NULL
其他
將懸掛指針(它指向的東西,它不擁有或不存在的指針)
Peter Norvig報價Auguste Comte(1798年至1857年):
"Nothing is destroyed until it is replaced"
你可以使用宏:
#define fclose(fp) ((fp) ? fclose(fp) : 0, (fp) = 0)
這修復不同和相對的問題:
的FILE *
指針fclose
後NULL'd,所以它不能是 fclose'd
兩次。
此版本的fclose
將接受NULL參數。 fclose
的許多常見 版本 - 如HPUX,SGI和CYGWIN中的那些版本 - 很樂意帶有NULL的 。奇怪的是FreeBSD啓發的版本,如Linux, 和微軟,都沒有。
當然,宏推出了自己的問題:
它不返回正確的錯誤值。但是,如果你想看到 這一點,你可以用額外的括號禁用宏,如:if ((fclose)(fp) == EOF){ /* handle error... */ }
它沒有功能的語義,因爲它使用它的參數 多次。但很難想象這會造成問題。但是你可以使用(fclose)
。或者將其命名爲FCLOSE
,遵循慣例。
在這種情況下,我該如何找出文件是否已經關閉或沒有。 – CuriousCoder
關閉後將其設置爲「NULL」... –