首先說明 fp不是外部變量,我是在做一個學生通訊錄,運用到子函數Open()打開文件,但是為什么這個子函數里用完fopen()后要fclose()一下?不是應該等所有操作,比如添加學生信息等操作完成保存時再關閉文件嗎?謝謝所有回答和要回答的人,因為只能給一個滿意,所以我認真考慮了下,給了一個我認為偏向我問題的人,lzdidiv你的回答也很棒!
5 回答

慕哥9229398
TA貢獻1877條經驗 獲得超6個贊
是的,在使用完一個文件后應該關閉它,這應該成為一個習慣。如果不關閉文件,可能會丟失數據。因為在向文件寫數據時,實現將數據輸到緩沖區,待緩沖區充滿后才正式輸出給文件,如果當數據未充滿緩沖區而程序結束運行,就會將緩沖區中的數據丟失。用fclose函數關閉文件,他先將緩沖區中的數據輸出到磁盤文件然后才釋放文件指針變量,從而避免了數據丟失。
關閉文件的格式是:
fclose(文件指針);

慕桂英3389331
TA貢獻2036條經驗 獲得超8個贊
如果子函數中用完fopen()后不調用fclose()的話,估計你在子函數中的輸出就會有問題,或者說會丟失數據。你試試看(先屏蔽了這個fclose運行看結果),如果是這樣的話回復我告訴你原因。
其實剛剛看到一樓已經說出了本質了。只是不知道你的程序到底是怎樣的結構。
或者你
是不是說在子函數中不調用fclose()是不會影響最終的結果的的?如果是,哪你的問題中“但是為什么這個子函數里用完fopen()后要fclose()一下?”矛盾了,這說明在此子函數中不調用也行的。這只是看你在此處對打開的文件有沒有進行相關數據的操作,有沒有在此確保數據的完整輸出。因為stdio庫會對數據進行行緩沖,所以在必要的時候使用fclose()是有必要的。其實,當程序正常結束時,會自動對所有打開的文件流調用fclose()的。
- 5 回答
- 0 關注
- 2383 瀏覽
添加回答
舉報
0/150
提交
取消