この関数の目的
fwrite()は、ストリームにデータを直接書き出す。 fread() も参照のこと。
定義
#include <stdio.h> size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
働き
この関数は ptr が指す配列から nmemb 個の size の大きさの要素を stream が指すストリームへ書き出す。 ストリームのファイル位置指定子が定義されていれば、成功裡に書かれた文字数だけ進められる。 エラー発生時のファイル位置指定子の値は不定になる。
返り値は、成功裡に書かれた要素数であり、書き込みエラーが発生したときのみ nmemb より小さくなる。
解説
常識的に考えるとバグの元になるのだが、返り値は書き込まれたバイト数ではなく、要素数である。 size に 1 を渡せばバイト数と同じことになる。
fread() 、 fwrite() を使うときに知っておくべきは、fwrite() が出力するのはメモリ上のオブジェクトそのままであり、 出力されたファイルを他のコンピュータ上に持っていっても fread() で復元されない可能性があるということである。 これは CPU の違いに起因するものである。多くのコンピュータで互換性のあるバイナリファイルを作りたかったら、データの表現方法を決めて、 それに変換してから1バイトずつ出力するのが最も安全な方法である。