0
#include <stdio.h>
#include <string.h>

#define NAMELENGTH 20
#define MAXPEOPLE 10

struct people{
    char name[NAMELENGTH];

    int ratings[MAXPEOPLE];
};

int main(void)
{
    struct people *men[MAXPEOPLE];
    strcpy(men[2]->name,"pie");

    return 0;
}

men [2]-> name men []-> nameはchar配列であり、最初の2つのスロットmen[0]->nameとmen[1]->nameは正常に機能します。

4

2 に答える 2

1

men[2]->はポインタではないため、演算子を使用するときは、ポインタではないものを逆参照しようとします。を使用するmalloc必要があり、割り当てられたスペースを指すポインタを使用できます

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define NAMELENGTH 20
#define MAXPEOPLE 10

struct people{
    char name[NAMELENGTH];

    int ratings[MAXPEOPLE];
};

int main(void)
{
    struct people *men[MAXPEOPLE];
    men[2] = malloc(sizeof(struct people));
    strcpy(men[2]->name,"pie");

    return 0;
}

最初の2つの「スロット」で(あなたのために)機能するという事実に関しては、それらのポインターも未定義であるため、実際には機能しないはずです。私にとっては、インデックス0でのみ機能します。

于 2013-01-29T23:52:27.670 に答える
1

の配列ではなく、ポインターの配列のみを作成しましたstruct people:

struct people *men[MAXPEOPLE];

これはポインターの配列を作成するだけですが、ポインターにスペースを割り当てていないため、ポインターはまだ何も指していません。nameこれは、実際には存在しない にコピーしていることを意味します。必要な配列を作成するにはstruct people:

struct people men[MAXPEOPLE];
strcpy(men[2].name,"pie");
于 2013-01-29T23:54:16.597 に答える