1

我无法在主程序中使用 make_employee 函数返回的指针。

// 我在一个单独的 .c 文件中有以下代码:

struct Employee;

struct Employee* make_employee(char* name, int birth_year, int start_year){
  struct Employee* new = (struct Employee*)malloc(sizeof(struct Employee));
  strcpy(new->name, name);
  new->birth_year = birth_year;
  new->start_year = start_year;
  return new;
}


//In the main program:

int main()
{
  char test_name[] = "Fred";
  int test_birth = 1989;
  int test_start = 2007;

  Employee Fred;

  make_employee(test_name, test_birth, test_start) = &Fred;     <-- throws invalid lvalue error

  return 0
}
4

2 回答 2

2

您不能将某些内容分配给非左值。因此名称(左值,左侧值,可以出现在赋值表达式的左侧)。

这是想做的吗??

int main()
{
  char test_name[] = "Fred";
  int test_birth = 1989;
  int test_start = 2007;

  struct Employee *fred = make_employee(test_name, test_birth, test_start)

  // use fred....

  free(fred);

  return 0
}

注意:不要malloc()在 C 中强制转换。确保stdlib.h包含在您的源文件中,如果您忘记这样做,让编译器警告您。如果您收到大意为“隐式声明malloc返回int”等的警告,则表示您忘记包含stdlib.h,您应该这样做。

于 2013-02-06T02:04:57.150 回答
0

我认为您需要检查您的 make_employee 功能。我这么说的原因是在您发布的代码中,您使用以下行

struct Employee* new = (struct Employee*)malloc(sizeof(struct Employee));

new 是 C++ 中的一个关键字,如果您使用过 C++ 编译器,应该会立即引发编译错误。使用关键字作为变量名是不好的。

还要检查函数的返回值。

假设您已经正确声明了您的结构,这应该可以正常工作

struct Employee* make_employee(char* name, int birth_year, int start_year){
  struct Employee *ptr = (struct Employee*)malloc(sizeof(struct Employee));
  strcpy(ptr->name, name);
  ptr->birth_year = birth_year;
  ptr->start_year = start_year;
  return ptr;
}


//In the main program:

int main()
{
  char test_name[] = "Fred";
  int test_birth = 1989;
  int test_start = 2007;

  Employee *Fred = make_employee(test_name, test_birth, test_start) ;   

  printf("Printing the data contents");
  printf("\n Name : %s",Fred->name);
  printf("\n Birth : %d",Fred->birth_year);
  printf("\n Start :%d",Fred->start_year);
  free(Fred);
  return 0;
}
于 2013-02-06T02:31:47.847 回答