dポイントプレゼントキャンペーン実施中!

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

A 回答 (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していると改行コードが変換されてしまうため、正しくバイナリーデータの読み書きができなくなってしまいます。
    • good
    • 0

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


規格にも, fread なら「適当な回数だけ fgetc を実行する」ようなもの, って書いてあります.
    • good
    • 0

freadやfwriteを使って大丈夫ですよ。


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

この回答への補足

回答ありがとうございます。
入門書のサンプルは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は基本的バイナリで使うものなのでしょうか?

補足日時:2010/03/11 23:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています