プロが教えるわが家の防犯対策術!

C言語のバイナリモードでのfscanf関数の使い方について教えて下さい。

2*2のint型配列バイナリデータを読み込んで、要素一つ一つを出力したいのですが、
fscanfでの書式指定の仕方がよく分かりません。
fscanf(入力元,"???",&入力先)の???の部分はどう指定すればよいのでしょうか?

下記のようなプログラムを書いたのですが、fscanfでデータを読み込めず、
data=0という出力で無限ループに入ってしまいます。

C言語初心者なので、かなり初歩的な質問かと思いますが、
よろしくお願いします。
--------------------------------------
char *fi;
int data;

fi = argv[1]; /* 2x2のint型配列バイナリデータを指定 */

input = fopen(fi,"rb");


while(!feof(input)){
fscanf(input,"%d",&data);
printf("data=%d\n",data);

}
---------------------------------------

A 回答 (1件)

int型が32bit、 ファイルとCPUのエンディアンが一致している、として


あえてfscanfを使うなら

fscanf(input,"%4c",(char *)(&data)) ;

だけど、私ならfreadを使います。
fread(&data, sizeof(int), 1, input)
    • good
    • 0
この回答へのお礼

>fscanf(input,"%4c",(char *)(&data)) ;
区切り幅を数値で指定できるんですね。。。勉強になります。

ご指摘の通り、実際はfreadの方が良いとは思うんですが、
勉強がてらfscanfでのやり方も知っておきたかったので質問させていただきました。

初歩的な質問でしたが、素早いご返答ありがとうございました!

お礼日時:2010/06/03 22:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!