Сначала struct employee* emps[maxemps];
создает массив из указателей для структурирования employee с размером массива maxemps .Вы на самом деле не выделяете в памяти места для фактических структур, а только указатели, которые будут на них указывать.Чтобы динамически распределять пространство в куче для ваших структур, чтобы вы могли использовать их осмысленно, вам нужно выполнить цикл по вызову malloc()
, например, так:
for (i = 0; i < maxemps; i++) {
emps[i] = malloc(sizeof(struct employee));
}
Вы также захотитеаналогичный цикл в конце вашей программы, который будет free()
каждый указатель.
Далее, когда вы получаете ввод от пользователя, вы действительно хотите использовать fgets()
вместо scanf()
, потому что fgets()
позволяет указать количество символов для чтения, чтобы предотвратить переполнение буфера назначения.
Обновление
Если вы хотите работать с одним struct employee
без использования указателейэто достигается путем объявления одного или нескольких struct employee
в стеке и последующего использования оператора доступа к элементу .
следующим образом:
struct employee emp;
fgets(emp.lastname, sizeof(emp.lastname), stdin);
Update2
Я обнаружил ряд ошибок вваш код.Пожалуйста, смотрите эту ссылку для рабочего образца с комментариями.