![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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していると改行コードが変換されてしまうため、正しくバイナリーデータの読み書きができなくなってしまいます。
No.2
- 回答日時:
もちろんテキストファイルに対して fread や fwrite を使うことはできます. ただし, テキストファイルなので当然ですがたとえば「改行コードがそれなりに変換される」ので, そこには注意する必要があります.
規格にも, fread なら「適当な回数だけ fgetc を実行する」ようなもの, って書いてあります.
No.1
- 回答日時:
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は基本的バイナリで使うものなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 100バイトのバイナリファイルを読み込んで別のファイルに書き込みたいのですが、型をどうすればいいのか 1 2022/11/03 17:11
- C言語・C++・C# C言語について教えて欲しいです。 ファイルの中身をコピーするプログラムを作ってます aというファイル 7 2022/11/03 19:21
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- ドライブ・ストレージ HDDのチェック方法 6 2022/05/04 09:49
- PHP PHPでテキストファイルに保存した時の改行問題 1 2022/11/19 15:07
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- 英語 英語についてです。 write と write it down の違い 教えてくれませんか? 調べた 6 2022/09/10 16:51
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
ファイルから読み込んだデータを構造体に格納できますか?
C言語・C++・C#
-
C言語のポインターに関する警告
C言語・C++・C#
-
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
-
4
ファイルから読み取った改行文字を消す方法
C言語・C++・C#
-
5
fgetsで拾われる改行文字を削除したい
C言語・C++・C#
-
6
C言語---ファイルに出力したデータをすべて消去する方法
C言語・C++・C#
-
7
fopenで開いたファイルのサイズを取得したい
C言語・C++・C#
-
8
C言語のfopenについて教えてください。
C言語・C++・C#
-
9
Debug Assertion Failed?
C言語・C++・C#
-
10
バッファとは何ですか
C言語・C++・C#
-
11
freadでデータがない場合の読込値は?
C言語・C++・C#
-
12
構造体とfscanf
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル内のデータを1行削除...
-
EOF判定されない
-
VC++6でfgets関数の変わりにな...
-
C言語のファイル読み込みに関し...
-
ファイル読み込みについて
-
バイナリファイルをテキストフ...
-
テキストファイルの先頭への文...
-
C言語での改行コードの扱いにつ...
-
改行までの一文字ずつのファイ...
-
winsock recvでの文字化け
-
【C言語】テキスト読み込みの行...
-
VS2010 MFC CStdioFileについて
-
VBSで指定行に挿入
-
C言語の質問です。クイズをテ...
-
0バイトファイルの作成
-
c言語 2つのファイルを行ご...
-
テキストファイルの行数を取得...
-
複数テキストファイルを読み込...
-
バッファとは何ですか
-
C言語初心者の質問失礼します。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内のデータを1行削除...
-
バイナリファイルをテキストフ...
-
fgetsで2行目から文字化け
-
VBSで指定行に挿入
-
テキストファイルの行数を取得...
-
c言語 2つのファイルを行ご...
-
改行までの一文字ずつのファイ...
-
freadとfwrite
-
fopenで開いたファイルのサイズ...
-
続・EOF判定されない
-
テキストファイルの文字列の削除
-
巨大なテキストファイル(可変...
-
ファイルサイズ指定し、ファイ...
-
fprintfで出力するファイルのパ...
-
ハフマン符号のプログラム
-
winsock recvでの文字化け
-
0x00をファイル出力
-
複数テキストファイルを読み込...
-
C言語でのtxt検索
-
VC++6でfgets関数の変わりにな...
おすすめ情報