Open1

fopenの追記モードに関する覚書

ritarita

それなりに職歴積んできたのにこんなミスで時間を溶かすとは、という自戒を込めて覚書。

fopenにはモードを引数として渡しますが、a で指定する追記モードの扱いには注意が必要です。

  • 追記モードでは、既に存在するファイルの中身を書き換えることはできない
  • fseekで既存の中身を指す位置を指定すると一見成功したように見えるが、実際に書き込み操作を行うとファイル末尾からの書き込みになる

上記の挙動となるため、「追記もしたいが既存の内容も書き換えたい」という場合は、r+ を使うのが正しい、ということになりそうです。