Имя и адрес электронной почты относительно просты; просто используйте strcpy
(или strncpy
);
strncpy(persons[i].name, ap_name, sizeof persons[i].name - 1);
Это скопирует содержимое строки, на которую указывает ap_name
, в поле имени структуры. Максимум sizeof persons[i].name - 1
(100 - 1 или 99) символов будет скопировано в persons[i].name
, и если длина строки, на которую указывает ap_name
, меньше, чем 99, то 99 - стр. ASCII 0) прилагаются. То же самое для электронной почты:
strncpy(persons[i].email, ap_email, sizeof persons[i].email - 1);
Обратите внимание, что это предполагает, что длина ap_name и ap_email всегда будет меньше, чем целевые буферы; как написано, ваш код в значительной степени гарантирует это, но дополнительная проверка работоспособности не может быть плохой идеей.
Что касается номера телефона, обычный int может быть (и, скорее всего, не будет) достаточно широким, чтобы содержать 10-значный номер, при условии, что вы храните код города или добавочные номера (минимальный диапазон, гарантируемый языковой стандарт [-32767,32767]
). Не говоря уже о том, что телефонные номера обычно представлены нечисловыми символами, например (999)-999-9999
. Вы также можете сохранить эту информацию в виде строки.
EDIT
Другой альтернативой для номера телефона является использование более широкого числового типа (желательно без знака):
struct PERSON {
...
unsigned long phone;
...
};
и затем преобразовать строку, используя strtoul()
:
persons[i].phone = strtoul(ap_phone, NULL, 10);
Библиотечная функция strtoul()
преобразует строковое представление числа в эквивалентное числовое значение.