Записать рандомные имена в структуру: Segmentation fault - C (СИ)
Формулировка задачи:
struct Client
{
char name[10];
char surname[30];
char fatherName[30];
char adress[30];
char phone_number[30];
char thing[30];
};
char names[5][10]={"Ваня","Дима","Саня","Вася"};
void initialize(struct Client *clients)
{int i,t;
for ( i = 0; i < 3; ++i)
{
t=rand()%3;
clients->name[10] = names[i][10];
}
}Решение задачи: «Записать рандомные имена в структуру: Segmentation fault»
struct Client
{
char *name;// здесь везде указатели
char *surname;
char *fatherName;
char *adress;
char *phone_number;
char *thing;
};
char *names[] = { "Ваня","Дима","Саня","Вася" };//мас. указ.
void initialize(struct Client *clients)
{
int i, t;
for (i = 0; i < 4; ++i)//от нуля до трех включительно
{
t = rand() % 4;//и здесь, от нуля до трех включительно
clients->name = names[t]; // здесь t
}
}
Объяснение кода листинга программы
В данном коде объявлена структура Client, которая содержит в себе указатели на строки. Также объявлен массив указателей на строки names с четырьмя элементами.
Функция initialize принимает указатель на структуру Client и инициализирует поля этой структуры случайным именем из массива names.
В функции используется цикл for с диапазоном от 0 до 3, который выполняется четыре раза.
Во время каждого прохода цикла, в переменной t генерируется случайное число от 0 до 3 с помощью функции rand().
Затем, указатель на имя в текущем клиенте (поле name) присваивается значению names[t].
Таким образом, каждое поле name в структуре Client будет случайно инициализировано одним из четырех возможных значений.