Это должно сделать это:
emps[i] = createEmployee(emp.first, emp.last, emp.title, emp.salary);
... но если бы вы немного изменили свою функцию, было бы намного лучше использовать:
emps[i] = createEmployee(emp);
Ваш Employee
структура может быть определена так:
struct Employee {
char first[256];
//...
};
... в этом случае 'first' это массив.Или, это может быть определено как
struct Employee {
char *first;
// ...
};
Массив символов и указатель на символ очень похожи на зверей.Но в первом случае вы автоматически выделяете 256 символов для имени при каждом создании Employee
.Во втором случае вы должны выделить память вручную и соответствующим образом продублировать ее при копировании, а также не забудьте удалить ее.
Скажем, ваш метод createEmployee
выглядит следующим образом:
Employee *createEmployee(char * first, char * last, char * title, int salary);
Если вы примете первую форму структуры Employee
, приведенной выше, вы можете сделать:
struct Employee *createEmployee(char * first, char * last, char * title, int salary) {
struct Employee *retVal = (struct Employee *)malloc(sizeof(struct Employee));
strcpy(retVal->first, first);
strcpy(retVal->last, last);
// etc
return retVal;
}
Во втором случае вы можете сделать:
struct Employee *createEmployee(char * first, char * last, char * title, int salary) {
struct Employee *retVal = (struct Employee *)malloc(sizeof(struct Employee));
retVal->first = strdup(first);
retVal->last = strdup(last);
// etc
return retVal;
}
Обратите внимание, чтово втором случае удаление (и копирование) становится довольно сложным делом.
void deleteEmployee(struct Employee *emp) {
free(emp->first);
free(emp->last);
// etc
free(emp);
}
... но для первой формы вам просто нужно free(emp)
.