質問: NULL){ printf("\afile %s is not exist.\n", fname); }else{ printf("file %s is exist.\n", fname); fclose(fp); /*------*/ printf("erase data...\n"); fopen(fname, "w"); fclose(fp); } return 0; } ``` ### 疑問点 の部分のfclose()関数を使用してもしなくても、動作をしたのですが、 どちらが、より安全にファイルを処理することが出来るかが知りたいです。 一回クローズしてからの方が安全なような気がします... ### 補足情報 書籍 : 新明解c言語 入門編 演習 13-2 英語力不足のため、英文に誤りがあればそれもご指摘願います。
回答: `fopen`でオープンしたら、必ず`fclose`でクローズする必要があります。動作したように見えたのは、`fclose`しなかったことによる不都合が表面化する前にプログラムが終了したからです。 `fopen`すると、管理用のメモリ領域が確保されます。たとえ同じファイルに対するオープンでも、別々の領域が割り当てられます。もし、`fclose`をしないままでいると、その管理領域がゴミとしてメモリに残ったままになり、場合によっては悪さを引き起こします。ただ、そうなる前にプログラムが終了すれば、一応「動作」はします。 > > 一回クローズしてからの方が安全なような気がします... > > > その通りですので、そうしてください。