Вы должны зарезервировать память для члена name
каждого экземпляра employee
:
p[i].name = (char*)malloc(expected_max_size);
непосредственно перед scanf
для этой переменной.Объявление указателя на char char*
назначает память не для фактической указанной строки, а только для самого указателя, и в вашем примере она не инициализируется.Используя malloc
, вы резервируете часть памяти и указывает на нее указатель.Вы должны быть осторожны с проверкой границ, потому что вам нужно заранее зарезервировать память, достаточную для хранения того, что пишет пользователь.