繁体   English   中英

无法将char数组分配给struct数组的第三个插槽

[英]Cannot assign a char array to my struct array's third slot

#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;
}

在尝试为男性分配任何值时崩溃[2] - >名称男性[] - >名称是一个字符数组,前两个插槽men [0] - > name和men [1] - > name工作正常。

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。

您只创建了一个指针数组,而不是一个struct people

struct people *men[MAXPEOPLE];

这只会创建一个指针数组,但指针尚未指向任何指针,因为您没有为它们分配任何空间。 这意味着您要复制到实际不存在的name 要创建所需的struct people

struct people men[MAXPEOPLE];
strcpy(men[2].name,"pie");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM