Не получается создать массив структур. Как это сделать , если заранее размер массив не известен? Его вводит пользователь
Задача "Справочник" Создать структуру со следующими полями: Имя человека, дата рождения, профессия, стаж работы (целое число) Логика работы программы: При старте спрашивает сколько N записей должно быть в справочнике (человек вводит). Далее программа создает массив из структур длиной N и спрашивает у человека про каждую запись (инициализирует структуры массива). После окончания инициализации программа спрашивает профессию, человек вводит. Программа ищет всех людей с такой профессией, считает возраст каждого и отношение его возрасту к стажу. Выводит на экран.
#include <stdio.h>
struct place{
char name[30];
char professional[40];
int date;
int worktime;
};
int main()
{ int N[];
printf("Enter pure structures:");
scanf("%d",&N);
}
Ответы (2 шт):
struct place * p = malloc(N*sizeof(struct place));
Если компилируете как C++ (это почему-то делают сплошь и рядом...), нужен каст:
struct place * p = (struct place *)malloc(N*sizeof(struct place));
По окончании работы не забудьте
free(p);
Чтобы создать массив объектов динамически нужно сделать следующее:
NeedType* Pointer = malloc(sizeof(NeedType) * NeedElements);
Где NeedType = нужный тип для массива, например char
Где Pointer = указатель на первый элемент массива (То есть сам массив)
NeedElements = количество элементов
Ещё:
malloc() в своём параметре принимает количество БАЙТ, а не элементов (На всякий случай скажу)
sizeof() в параметре нужен чтобы узнать размер одной структуры в байтах. Это работает с любым типом. (Он вернёт именно то значение, которое занимает этот тип. То есть если вы передаёте туда указатель - он вернёт размер который занимает именно указатель, а не размер того, на что он указывает.)
malloc() вернёт NULL в случае ошибки (Например если памяти не хватает для выделения)
параметр malloc() не может быть 0