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 分配任何值时崩溃,它是一个字符数组,前两个插槽 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 回答