• ベストアンサー

freadとfwrite

 C言語初心者です。 fopenでテキストファイルで読み込んで,freadやfwriteなどは使っていいのでしょうか? 入門書などでは、freadやwriteはバイナリファイルでしか使っていないので疑問になりました。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

使えないことは無いけれど テキストモードで開くってことは、テキスト(文字または文字列)として使用したいわけで ・一文字の読み書きにはfgetc,fputc等の専用関数があるし、その方が直感的で解りやすい fread(&ch, sizeof(char), 1, fp); と ch = fgetc(fp); どちらがわかりやすいですか? ・fgetsやfscanf等、テキストの特徴を生かした、特定の文字や改行などの区切りを利用する読み込み方法に比べて、固定文字数で読み込むfreadはテキスト向けではない。 ・同様に、文字列を出力するfputsやfprintfに対して、文字数を指定しなければならないfwriteはテキスト向きではない。 fputs(str,fp); と fwrite(str,sizeof(char),strlen(str),fp); どちらが解りやすいでしょうか? 等、使い勝手が悪いからだと思います。 また、fread/fwriteの出番であるバイナリーデータの読み書きでは、テキストモードでopenしていると改行コードが変換されてしまうため、正しくバイナリーデータの読み書きができなくなってしまいます。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

もちろんテキストファイルに対して fread や fwrite を使うことはできます. ただし, テキストファイルなので当然ですがたとえば「改行コードがそれなりに変換される」ので, そこには注意する必要があります. 規格にも, fread なら「適当な回数だけ fgetc を実行する」ようなもの, って書いてあります.

すると、全ての回答が全文表示されます。
回答No.1

freadやfwriteを使って大丈夫ですよ。 fopenで開くときに fopen("hogehoge.txt", "r") で開けば読み取り専用 fopen("hogehoge.txt", "w") で開けば書き込み専用 といったように変わってくるだけです。 入門書のサンプルはrbで開いていませんか? bがつくとバイナリとなるのです。

r_konagi_0
質問者

補足

回答ありがとうございます。 入門書のサンプルはrbで開いています。でも 例) fp = fopen("hogehoge.bin", "rb"); fread(&ch, sizeof(char), 1, fp); はあっても、 fp = fopen("hogehoge.txt", "r"); fread(&ch, sizeof(char), 1, fp); とは無いのでやはりfread, fwriteは基本的バイナリで使うものなのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A