1

構造体の一部の変数をファイルに出力しようとすると、セグメンテーション違反が発生します。最初にコードを書いたとき、最後に表示されるセグメンテーション違反を除いて、結果を画面にうまく出力できました

ただし、ファイルに出力するようにコードを変更すると、ファイルが作成されますが、ファイルは空で、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;
}

編集: セグメンテーション エラーが表示されないようにコードを修正しました。すべてが機能するようになりました。

ありがとう。

4

1 に答える 1

1

制限を超えて配列を読み取っている可能性があります。

配列要素をループする次の方法を試してください。

len = sizeof(artWalker)/sizeof(artWalker[0]);

for (i=0; i<len ; i++) {
    ...
    artWalker[i]->struct_member;
    ...
}
于 2012-04-24T18:01:47.853 に答える