- ベストアンサー
fread関数の使い方がわかりません。
以下のプログラムで試しているのですが、コンパイルはできても各配列の要素が表示されません。なぜなんでしょうか? #include<stdio.h> main() { FILE *fp; int i,b[10]; char a[10]; gets[a]; //ファイル名を指定 fp = fopen(a,"rb"); //バイナリモードでオープン fread(b,3,10,fp); //配列に3byteづつ書き込んだつもり for(i=0;i>=9;i++){ printf("%02x\n",b[i]); //この部分の表示がされない。 } fclose(fp); } レベルの低い質問ですいませんがよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>ちなみに3バイトづつ配列に入れていくことはfreadをつかってできますでしょうか? 下の2通りが普通ですかね? ただし、両方ともb[]の初期化をあらかじめしておかないと 4バイト目にごみが残っていますので注意してください。 方法1 3バイトずつ複数回に分けて読む。 for(i=0;i<=9;i++){ fread(b,3,1,fp); printf("%02x\n",b[i]); } 方法2 まとめて読んで、切り分ける char buf[30]; fread(b,1,30,fp); for(i=0;i<=9;i++){ memcpy(&b[i], &buf[i*3],3); printf("%02x\n",b[i]); } でしょうかね? で、それって本当に整数値なんですか? そもそも、もとのデータはどのようにファイルに書き込まれたのですか? 普通は3バイトずつなんて整数値はファイルに書かないんですけど。
その他の回答 (3)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
intは、32bitOSなら4バイトです。 3バイトずつ読んでもint配列にはちゃんと入らないような・・・
お礼
ありがとうございます。 確かにint型なのできちんと表示されませんでした。 ちなみに3バイトづつ配列に入れていくことはfreadをつかってできますでしょうか?
- HogePiyo
- ベストアンサー率57% (24/42)
> for(i=0;i>=9;i++){ for( i = 0; i <= 9; i++ ){ それと、 > gets[a]; gets(a); ですよね?
お礼
ありがとうございます。(恥。。。)
- bug_master
- ベストアンサー率52% (10/19)
> for(i=0;i>=9;i++){ ~~~~ 煮詰まったら一腹して頭をスッキリさせるのが良いかと。
お礼
ありがとうございます。(恥。。。)
お礼
どうもありがとうございました。 その方法でやってみたいと思います。