C - 赋值中不兼容的类型 - 结构和字符数组

时间:2015-02-06 22:41:43

标签: c pointers struct

好吧,所以我的情况的要点是我在尝试初始化我的结构时卡在分配中遇到了不兼容的类型。我对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个小时,没有运气,以为我会在这里试一试。

2 个答案:

答案 0 :(得分:1)

char* name[100];

是指向char的指针数组,但是:

char* name;

是指向char的指针。

下面:

newEmpl->name = name;

您正在尝试将指针char指定给数组,但您不能在C中指定指向数组的指针!实际上,您无法在C中为数组指定任何内容。

检查您是否在程序中使用了正确的类型。您确定要使用char *name[100];而不是char name[100];(char数组)?然后要复制字符串,请使用strcpystrncpy而不是=运算符,因为您无法为数组指定内容。

答案 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

注意:

  1. 请不要转换malloc()和家人的返回值。
  2. 在使用返回的指针之前,请检查malloc()和系列的成功。