■30925 / inTopicNo.9) |
Re[3]: fwriteについて |
□投稿者/ 774RR (282回)-(2009/01/09(Fri) 12:38:51)
|
そう、その辺 fwrite の使い方が難しいあたりなんで・・・・
nn=size*count; としておいて 何バイト書けたか?が気になるプログラマーは fwrite(p, 1, nn, f); として使いたい (この場合、一部書き込め、一部書き込めていない、不完全なデータができちゃう) 正しく書けたか?しか気にしないのなら fwrite(p, nn, 1, f); でいい
本来の fwrite の返却値の意味、「何個書けたか」は実際のプログラムでは使いづらいことが多くて 良くある解説「サイズか、個数か、どっちかに1を使え」 ってのはある意味正しい戦術なのよね。
# fwrite で struct を直接書き出しちゃうと endian/padding 問題が発生して # ソースコードは互換でも、データファイルが互換にならないわけだがとりあえず省略
fwrite/fread は指定位置からデータが連続している必要があり、 vector はデータを連続的に保持するので fwrite(&v[0], サイズ, 個数, f) でうまく動くわけなんだが list はデータを連続に保持しないので fwrite(&l[0], サイズ, 個数, f) はダメちゃん。 つうことで C++ ではコンテナに対して直接 fwrite/fread はあまり好まれなくって http://blogs.wankuma.com/episteme/archive/2009/01/09/166002.aspx
|
|