- ベストアンサー
fread関数でわかりません。
fread関数で次のようにソースを記述しました。 FILE *fp; char c[10]; int i; fp = fopen ("./aaa.txt", "rb"); fread(c, sizeof(char)-1, 10, fp); for(i = 0; i < 10; i++) printf("%02x ", *(c+i)); fclose(fp); return 0; aaa.txtの中には 0x1~0xAの10個の数字が記入されています。 cをint 型にすると正常に読み込めるのですが、char型だと 01 00 00 00 02 00 00 00 03 00 となってしまい、正常に読み込めません。 どうも、int型で読み込み、さらに引数 cにはchar *でキャストして渡しているように見受けられます。 Q1 どのようにしたら、char型で 10個一度に読み込めるようになるのでしょうか? Q2 int型(32bit)なら、一度に4文字読み込むと思いますが、何故一文字ずつ読み込むことになるのでしょうか? //getc で一文字ずつ読み込めば済む話ですが、気になり質問いたしました。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>aaa.txtの中には 0x1~0xAの10個の数字が記入されています。 >cをint 型にすると正常に読み込めるのですが、char型だと >01 00 00 00 02 00 00 00 03 00 >となってしまい、正常に読み込めません。 それってテキストファイルではないような。 type aaa.txtとするか、メモ帳で開くとどうなりますか? バイナリファイルとして、 0x00000001 0x00000002 0x00000003 .... 0x0000000A と入っているのなら、fread一回でchar[10]に読み込むのは無理です。 さらに、 >//getc で一文字ずつ読み込めば済む話ですが、気になり質問いたしました。 getcで一文字ずつ読み込む方法でもうまくいかないはずですよ。
その他の回答 (2)
- takoashi
- ベストアンサー率39% (21/53)
Q1の回答 //MSDNより size_t fread(void *buffer,size_t size,size_t count,FILE *stream ); 第2引数は、サイズです。 fread(c, sizeof(char), 10, fp); Q2の回答 > int型(32bit)なら、一度に4文字読み込むと思いますが 4文字読み込んでいるではく、4バイト読み込んでいます
お礼
> 第2引数は、サイズです。 すいません。他の質問をみて変更してしまい、そのままにしていました。 #3の方への回答にあるように、aaa.txtをどこかで編集してしまったようです。 有難うございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
fread の第2引数, sizeof(char)-1 って 0 なんだけどなぁ.... なんで sizeof(char) (もしくは等価な 1) にしないんだろ?
補足
他の質問を見て変えたのですが、そのままにして投稿してしまいました。 間違いでした。 私の質問への答えはありませんか?
お礼
stirling.exe で./aaa.txt で見たところ、 0x00000001, 0x00000002, ..., 0x0000000Aと記入されていました。 ・・・aaa.txtを編集してしまったようです。 有難うございました。
補足
stirling.exe で./aaa.txt で見たところ、 0x00000001, 0x00000002, ..., 0x0000000Aと記入されていました。 ・・・aaa.txtを編集してしまったようです。 有難うございました。