【问题标题】:Error working with structs and pointer arrays: incompatible types in assignment使用结构和指针数组时出错:赋值中的类型不兼容
【发布时间】:2010-02-02 12:36:47
【问题描述】:
#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"; 上生成错误,说分配中的类型不兼容。为什么?
【问题讨论】:
标签:
c
pointers
arrays
struct
【解决方案1】:
你不想要一个指针数组。试试
PERSON personen[1];
正如其他人所说,使用 strcpy 函数!
【解决方案2】:
不要尝试分配数组。使用strcpy 将字符串从一个数组复制到另一个数组。
...sName 是一个字符数组,而“Pieter”是一个 const char*。您不能将后者分配给前者。编译器永远是对的:)
【解决方案3】:
改变
PERSON *personen[1];
到
PERSON personen[1];
并使用 strcpy 复制字符串。
strcpy(personen[0]->sName,"Pieter");
【解决方案4】:
我同意上述观点,但我认为包括“为什么”也很重要
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 倍于整数大小的内存块(因此它将像 d 一样保存 5 个整数)