4

私のコードが正しいかどうかを理解しようとしています。構造体へのポインターの配列を宣言し、新しい構造体を作成し、値を割り当てて出力する必要があります。ポインターの配列を正しく宣言していないようです。私が間違っていることを知る必要があります。ありがとう、このコンパイル エラーが発生しています: エラー: 'people' 宣言されていません (この関数で最初に使用) そして、構造体データ *list; を挿入しようとしました。メインに入れますが、うまくいきません

     char *book[] = { "x", "y", "z",};
     int number[] = { 1, 2, 3};

     struct data = { char *bookname; int booknumber;};

     function(char *x, int y)
     {
       static int count;

       struct data *list[3];

       //creating a new struct 
       list[count] = (struct data*) malloc( sizeof(struct data) );

       //assigning arguments
       list->bookname = x;
       list->booknumber = y;

       count++;
     }

     int main()
     {
       struct data *list[3];

       int i;
       for(i = 0; i < 3; i++)
       {
         function(book[i], number[i]);

         printf("name: %c number: %d", list[i]->bookname, list[i]->booknumber);
       }
4

4 に答える 4

3

配列が必要なので、配列を宣言する必要があります。

char *book[] = { "x", "y", "z",};
int number[] = { 1, 2, 3};

もう一つの問題は

list = (struct data*) malloc( sizeof(struct data) );

//assigning arguments
list[count]->bookname = ...

ここでは、 にlistは常に 1 つの要素が含まれます。したがって、countが 以外の場合は0、範囲外の配列にアクセスすることになります!

于 2012-07-19T15:41:16.003 に答える
0

私はあなたが書くべきだと思います:

char *book[] = { "x", "y", "z"};

あなたの場合、文字の配列を宣言してポインターで埋めていたため、実際には意味がありません。

上記のコード行では、単に「ポインターの配列を宣言する」ことを意味しています。

それが役に立ったことを願っています...

于 2012-07-19T15:42:04.800 に答える