わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

途中の情報をファイルに残すときの注意点

かつて学生に指導したときのメモが残っていたので,文章にしました.
学生が,Cでプログラムを書いていて,printfデバッグだと出力する情報が多すぎるので,重要な情報をファイルに出力することにしました.そのときのアドバイス

  • 文字列を引数にとり,それをファイルに書き込む関数を定義して,呼び出すようにします.関数の中でその都度,ファイルを開き(fopen),文字列を書き込み(fputsまたはfprintf),閉じます(fclose).
  • 毎回開いて閉じるのは非効率的なので,ファイルを開く処理,閉じる処理を別に書くのもいいでしょう.ただし,ファイルを開いているのに,別のところで開いてはいけません.そうすると,どちらかの内容しか保存されません*1
  • fopenの第2引数を"w"にしていると,ファイルを開くたびに中身がなくなってしまい,結局,最後の内容しか残りません.こういうときは,"w+"を指定して,追加書き込みにします*2

*1:「後に閉じたほう」の内容が保存される,と想像できますが,エラー終了のときにどうなるかは分かりません.

*2:ファイルを初期化したいときは,fopenで第2引数に "w"を与えるよりも,unlink関数を使って削除するほうが,混乱が少ないでしょう.プログラムの外でファイルを削除するべきかもしれません.