使用结构和指针数组时出错:赋值中的不兼容类型

时间:2010-02-02 12:36:47

标签: c pointers arrays struct

#define STRMAX 50

struct Person {
    char sName[STRMAX];
    int iAge;
};
typedef struct Person PERSON;

int main() {
    PERSON *personen[1];
    personen[0]->sName = "Pieter";
    personen[0]->iAge = 18;

    return 0;
}

此代码在personen[0]->sName = "Pieter";上生成错误,指出分配中的不兼容类型。为什么呢?

4 个答案:

答案 0 :(得分:2)

您不需要指针数组。尝试
PERSON personen[1];

和其他人一样说,使用strcpy函数!

答案 1 :(得分:1)

不要尝试分配数组。使用strcpy将字符串从一个数组复制到另一个数组。

... sName是一个字符数组,而“Pieter”是const char*。你不能将后者分配给前者。编译器总是正确的:)

答案 2 :(得分:1)

更改

PERSON *personen[1];

PERSON personen[1];

并使用strcpy复制字符串。

strcpy(personen[0]->sName,"Pieter");

答案 3 :(得分:0)

我同意上述内容,但我认为包括“为什么”

也很重要
int a;      // is an integer
int *b;     // pointer to an integer must be malloced (to have an array)
int c[];    // pointer to an integer must also be malloced (to have an array)
int d[5];   // pointer to an integer bu now it is initialized to an array of integers

从简单的指针获取b和c并给它们匹配的内存d使用以下内容为它们提供内存空间

b = (int *) malloc(sizeof(int)*5);

它将从malloc返回的指针强制转换为int指针,并创建一个整数大小为5倍的内存块(因此它将保存5个整数,如d)