ファイルを読み取り、すべてを解析して人のリストにする次のコードがあります。
PersonList *parseFile(FILE* file) {
PersonList *list = newPersonList();
int r;
do {
char fname[50];
char name[50];
char gender;
int birthYear;
int deathYear;
r = fscanf(file, "%50s %50s %1s %d %d", fname, name, &gender, &birthYear, &deathYear);
printf("%s %s %c %d %d\n", fname, name, gender, birthYear, deathYear);
// Stuff I want to do in future
} while (r != EOF);
return list;
}
ファイルの形式は次のとおりです。
Alexander Wallner m 1922 1957 Bertram Hohlbichler 1905 Hermine Wallner 1904
文字列 文字列 char int int 文字列 文字列 int 文字列 文字列 int
それで、私はその人を取得しようとし、次に両親を取得しようとします。奇妙なことに、printfはその人のfnameを出力しません。fscanfでfnameとnameの順序を変更すると、最初の文字列はnameに保存されますが、2 番目の文字列は fname には保存されません。この好奇心は、5、6 行目のfanameとnameの宣言の順序に依存します。ひっくり返すと名前が埋まらない。それは何のハックですか?fnameに文字列を保存できないのはなぜですか? 誰かがこの奇妙な振る舞いを説明できることを願っています。ありがとう。