• ベストアンサー

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); } レベルの低い質問ですいませんがよろしくお願いします。

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.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バイトずつなんて整数値はファイルに書かないんですけど。

jimihenn
質問者

お礼

どうもありがとうございました。 その方法でやってみたいと思います。

その他の回答 (3)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

intは、32bitOSなら4バイトです。 3バイトずつ読んでもint配列にはちゃんと入らないような・・・

jimihenn
質問者

お礼

ありがとうございます。 確かにint型なのできちんと表示されませんでした。 ちなみに3バイトづつ配列に入れていくことはfreadをつかってできますでしょうか?

  • HogePiyo
  • ベストアンサー率57% (24/42)
回答No.2

> for(i=0;i>=9;i++){ for( i = 0; i <= 9; i++ ){ それと、 > gets[a]; gets(a); ですよね?

jimihenn
質問者

お礼

ありがとうございます。(恥。。。)

回答No.1

> for(i=0;i>=9;i++){       ~~~~ 煮詰まったら一腹して頭をスッキリさせるのが良いかと。

jimihenn
質問者

お礼

ありがとうございます。(恥。。。)

関連するQ&A