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 に答える