ページ 11

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 ジェリナゲ
ありがとうございます。解決しました。