コードで segfault が発生しましたが、その理由がわかりません。配列を動的に割り当てるために、ファイルを読み込んで行数を数えます。次に、ファイルを巻き戻し、ファイル内のデータを読み取り、データを変数に格納してから、読み取った変数を配列に格納しますが、文字に問題があります。
...
char *aname = malloc(sizeof(char) * 3);
...
// get # lines in file (count)
...
char *aname_seen = malloc(count * (sizeof(char) * 3));
...
rewind(file);
while (fgets(buff, sizeof buff, file) != NULL)
{
if (sscanf(buff, "%s %d %s %s %d %lf %lf %lf %lf %lf\n",
atm, &serial, aname, resName, &resSeq, &x, &y, &z,
&occupancy, &tempFactor) == 10)
{
aname_seen[i] = *aname;
printf("%d: %s vs %s\n", i, aname, aname_seen[i]);
i++;
} // end sscanf if-loop
} // end while loop
aname をprintf("%d: %s\n", i, aname)
出力して期待される出力を得ることができますが、Segmentation fault (core dumped)
試してみると得られprintf("%d: %s vs %s\n", i, aname, aname_seen[i])
ます。
この while ループ + ネストされた if ループは、行数をカウントするために使用する規則と同じであるため、i
カウントまでインクリメントします。aname_seen を間違って割り当てて、実際に要素count
数を与えていませんか? char*3
私はチャーをいじることに精通していません。数値の Fortran バフなので、方向性が必要です。
前もって感謝します!