Не получается создать массив структур. Как это сделать , если заранее размер массив не известен? Его вводит пользователь

Задача "Справочник" Создать структуру со следующими полями: Имя человека, дата рождения, профессия, стаж работы (целое число) Логика работы программы: При старте спрашивает сколько 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 шт):

Автор решения: Harry
struct place * p = malloc(N*sizeof(struct place));

Если компилируете как C++ (это почему-то делают сплошь и рядом...), нужен каст:

struct place * p = (struct place *)malloc(N*sizeof(struct place));

По окончании работы не забудьте

free(p);
→ Ссылка
Автор решения: bloody

Чтобы создать массив объектов динамически нужно сделать следующее:

NeedType* Pointer = malloc(sizeof(NeedType) * NeedElements);

Где NeedType = нужный тип для массива, например char

Где Pointer = указатель на первый элемент массива (То есть сам массив)

NeedElements = количество элементов

Ещё:

malloc() в своём параметре принимает количество БАЙТ, а не элементов (На всякий случай скажу)

sizeof() в параметре нужен чтобы узнать размер одной структуры в байтах. Это работает с любым типом. (Он вернёт именно то значение, которое занимает этот тип. То есть если вы передаёте туда указатель - он вернёт размер который занимает именно указатель, а не размер того, на что он указывает.)

malloc() вернёт NULL в случае ошибки (Например если памяти не хватает для выделения)

параметр malloc() не может быть 0

→ Ссылка