好吧,所以我的情况的要点是我在尝试初始化我的结构时卡在分配中遇到了不兼容的类型。我对C很新,理解指针对我来说是一个很大的挑战,但是我已经看过类似的问题并尝试了不同的修复方法,到目前为止还没有运气。如果有人可以为我解决这个问题,你就会成为我的英雄。
struct Employee {
char* name[100];
int birth_year;
int starting_year;
};
struct Employee* make_employee(char* name, int birth_year, int starting_year);
int main(){
//some main stuff code
}
struct Employee* make_employee(char* name, int birth_year, int starting_year){
struct Employee* newEmpl = (struct Employee*)malloc(sizeof(struct Employee));
newEmpl->name = name;
newEmpl->birth_year = birth_year;
newEmpl->starting_year = starting_year;
return newEmpl;
}
分配错误发生在name = name行上。我不知道为什么。 如果我用
切换该行strcpy(&(newEmpl->name), name);
我明白了:
警告:传递' strcpy'的参数1来自不兼容的指针类型
我试图找到问题2个小时,没有运气,以为我会在这里试一试。
答案 0 :(得分:1)
char* name[100];
是指向char
的指针数组,但是:
char* name;
是指向char
的指针。
下面:
newEmpl->name = name;
您正在尝试将指针char
指定给数组,但您不能在C中指定指向数组的指针!实际上,您无法在C中为数组指定任何内容。
检查您是否在程序中使用了正确的类型。您确定要使用char *name[100];
而不是char name[100];
(char数组)?然后要复制字符串,请使用strcpy
或strncpy
而不是=
运算符,因为您无法为数组指定内容。
答案 1 :(得分:0)
在您的结构中,更改
char* name[100]; //an array of pointers to character
到
char name[100]; // a character array
然后,在make_employee()
函数中,而不是
newEmpl->name = name; //arrays cannot be assigned
使用
strcpy(newEmpl->name, name); // copy the contains of name to newEmpl->name
或
strncpy(newEmpl->name, name, 99); // limit to 99 elements only + terminating null
注意:
malloc()
和家人的返回值。malloc()
和系列的成功。