ページ 1 / 1
fscanf コアダンプ
Posted: 2014年8月30日(土) 14:21
by ジェリナゲ
以下のソースコードを実行するとコアダンプになってしますのですが、どこがおかしいのかわかりません。
dunhgeon.txtの中は 10 0 となっています。
コード:
#include <stdio.h>
unsigned long int DSEED;
int main(void){
FILE* fp;
int number;
if((fp=fopen("dungeon.txt","r"))!=NULL){
fscanf(fp,"%d %d",DSEED,number);
printf("%d %d",DSEED,number);
fclose(fp);
}
return 0;
}
Re: fscanf コアダンプ
Posted: 2014年8月30日(土) 15:03
by YuO
fscanfの,%dに対応する引数はint *型でないといけません。
DSEEDはunsinged long型,numberはint型ですから,これを満たしません。
DSEEDとnumberにファイルから値を読み取りたいのであれば,
- fscanfの引数を,DSEEDとnumberではなく,それぞれへのポインタである,&DSEEDと&numberに変更する
- &DSEEDの型はunsigned long *なので,それに合わせて書式文字列を"%lu %d"に変更する
という作業が必要です。さらに,その次のprintfも,DSEEDの型に合わせて"%lu %d"とする必要があります。
オフトピック
WindowsのようなLLP64の環境ではintとlongを同一視できるけれども,Unix系でのLP64環境では同一視できません。
Re: fscanf コアダンプ
Posted: 2014年8月30日(土) 15:38
by ジェリナゲ
ありがとうございます。解決しました。