C-赋值结构和字符数组中的不兼容类型
好的,我的情况的要点是,当我试图初始化我的结构时,我在赋值中遇到了一个不兼容的类型。我是C语言的新手,理解指针对我来说是一个很大的挑战,但我已经研究了类似的问题,尝试了不同的修复方法,到目前为止还没有运气。如果有人能帮我解决这个问题,你就是我的英雄C-赋值结构和字符数组中的不兼容类型,c,pointers,struct,C,Pointers,Struct,好的,我的情况的要点是,当我试图初始化我的结构时,我在赋值中遇到了一个不兼容的类型。我是C语言的新手,理解指针对我来说是一个很大的挑战,但我已经研究了类似的问题,尝试了不同的修复方法,到目前为止还没有运气。如果有人能帮我解决这个问题,你就是我的英雄 struct Employee { char* name[100]; int birth_year; int starting_year; }; struct Employee* make_employee(char* name, i
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
我花了两个小时试图找到问题,但运气不好,我想在这里试一试。在你的结构中,改变一下
char* name[100]; //an array of pointers to character
到
然后,在make_employee()
函数中,而不是
newEmpl->name = name; //arrays cannot be assigned
使用
或
注:
malloc()
和family的返回值malloc()
和family是否成功char
的指针数组,但:
char* name;
是指向char
的指针
在这里:
您正试图将指向char
的指针分配给数组,但在C语言中无法将指针分配给数组!事实上,在C语言中,你不能给数组赋值
检查您在程序中使用的类型是否正确。是否确实要使用
char*name[100]代码>和非字符名[100]代码>(字符数组)?然后,要复制字符串,请使用strcpy
或strncpy
而不是=
运算符,因为您无法将某些内容分配给数组。代码中的name
是指针数组。也许你想拥有char name[100]
?甚至比strcpy更好,请使用char*strncpy(char*dest,const char*src,size\t n)
和大小参数100,这样你就不会溢出字符串缓冲区。@fearless\u傻瓜谢谢,先生,但是大小应该是99以容纳终止的null。已更新。:-)嗯,我不同意应该是99,但我知道我错了。检查文档中的strncopy,并说明为什么您认为它应该是99.:)strncpy
不放置终止null如果缓冲区中不适合,则必须编写代码来执行此操作。使用strncpy几乎总是一个糟糕的主意。我同意裸体strncpy是个坏主意(但strcpy更糟糕!)。您需要的是strncpy(newemp->name,name,BUFLEN);newemp->name[BUFLEN-1]='\0'
强制最后一个字符为空。
strcpy(newEmpl->name, name); // copy the contains of name to newEmpl->name
strncpy(newEmpl->name, name, 99); // limit to 99 elements only + terminating null
char* name[100];
char* name;
newEmpl->name = name;