構造体の変数をファイルに出力しようとすると、セグメント化エラーが発生します。最初にコードを書いたときに、結果が画面に表示されましたが、最後に表示されるセグメンテーション違反を除いて問題なく表示されました。セグメンテーションエラーと構造体変数がファイルに出力されない
しかし、私がコードを変更してファイルを作成するとファイルが作成されますが、ファイルは空で、segmentation fault
が画面に印刷されます。
アドバイスはありますか?
/* all is an array of struct CASE,
artall is an array of struct ARTCOUNT,
pLast is last element in all */
void printArtCount (CASE* all, ARTCOUNT* artAll, CASE* pLast)
{
ARTCOUNT* artWalker = artAll;
CASE* walker;
char input[51];
FILE* spOut;
printf("File name for artist count output: ");
scanf("%50s", input);
spOut = fopen(input, "w");
while(artWalker->name)
{
fprintf(spOut, "%d ", artWalker->count);
fprintf(spOut, "%s\n", artWalker->name);
for(walker = all; walker <= pLast; walker++)
{
if (strcmp(walker->name, artWalker->name) == 0)
fputs(walker->art, spOut);
}
artWalker++;
}
return;
}
編集:セグメント化エラーが表示されなくなるようにコードを修正しました。 EVerythingは現在動作しています。
ありがとうございました。
どのように 'while'ループが動作すると思いますか?初期化されていないメモリへのポインタを間接参照するとどうなりますか?あなたは "未定義の振る舞い"について聞いたことがありますか? – Beta
@cnicutar: 'artWalker'はポインタです。ヌルになるまでそれをインクリメントしますか? – Beta
@Beta Yup、そうです。 OPは 'while(* artWalker)'を意味すると私は思う。 – cnicutar