fscanf コアダンプ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ジェリナゲ
記事: 17
登録日時: 11年前

fscanf コアダンプ

#1

投稿記事 by ジェリナゲ » 11年前

以下のソースコードを実行するとコアダンプになってしますのですが、どこがおかしいのかわかりません。
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;

}


YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: fscanf コアダンプ

#2

投稿記事 by YuO » 11年前

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環境では同一視できません。

ジェリナゲ
記事: 17
登録日時: 11年前

Re: fscanf コアダンプ

#3

投稿記事 by ジェリナゲ » 11年前

ありがとうございます。解決しました。

閉鎖

“C言語何でも質問掲示板” へ戻る