- ベストアンサー
添削おねがいします
初心者ですいませんが添削お願いできますでしょうか? jpegのファイルをバイナリとして表示したいのですができません。 以下のプログラムではどこがだめなんですか? #include<stdio.h> main() { int a[100],i; FILE *fp; fp=fopen("test.jpg","rb"); for(i=1;i<=100;i++){ fscanf(fp,"%x",&a[i]); printf("%x",a[i]); } fclose(fp); }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
fscanfはテキストファイルからデータを読み込むための関数ですから、 このようなバイナリーファイルには使えません。 ("%x"は16進数で書かれた「文字列」を読んで整数値にするものです。) いくつかやりかたはありますが、最も単純なのはgetcを使うやり方でしょう。 int c; while((c=getc(fp))!=EOF) { printf("%x",c); } 途中で適当に改行を入れないと見ずらいかも。
その他の回答 (2)
- yatokesa
- ベストアンサー率40% (201/496)
fscanf は(おおざっぱに言えば)キャラクタコードを読むためのもので、%x としてもバイナリデータは取り込めません。freadを使いましょう。 また、終了判定がされていません。freadの戻り値で判定してください。詳しくは参考書等に譲ります。
お礼
どうもありがとうございました。 もう少し勉強してきます。
- junichirohouse
- ベストアンサー率71% (5/7)
int a[100] と宣言しているから、a[0]~a[99]が使用できますが、a[100]は使用できません。 for(i=1;i<=100;i++){…} ではなく for(i=0;i<100;i++){…} とすれば良いと思います。
お礼
どうもありがとうございます。 おっしゃる通りでした。
お礼
どうもありがとうございます。 なんとか言われたとうりやってみるとできました。 良い勉強になりました。