как динамически выделить память под массив структур в Си

есть структура

typedef struct student {
    char *name;
    char number_of_group[8];
    double score;
};

это лаба моя. там предполагается менюшка

    printf("What would you like to do?\n");
    printf("1 - input\n");
    printf("2 - output\n");
    printf("3 - data processing\n");
    printf("4 - stop and exit\n");

там я перехожу в подменюшку для ввода

    printf("What would you like to do?\n");
    printf("1 - console input\n");
    printf("2 - file input\n");
    printf("3 - random input\n");
    printf("4 - back to main menu\n");

в разных подменюшках разное считываение количества элементов поэтому в каждой надо выделить память. изначально я в мейне объявляю структуру struct student *mephist; как мне выделить динамически память подскажите пожалуйста


Ответы (1 шт):

Автор решения: KoVadim

Выделить память под структуру

struct student *mephist = malloc(sizeof(struct student));

если пишется код, который и под плюсы будет компилироваться, то где то так

struct student *mephist = (struct student *)malloc(sizeof(struct student));

Если же нужно выделить память под несколько элементов массива, тогда просто нужно домножить

int n = 100; // под 100 элементов
struct student *mephist = malloc(n*sizeof(struct student));
mephist[99] - последний элемент

также есть хорошая штука calloc

int n = 100; // под 100 элементов
struct student *mephist = calloc(n, sizeof(struct student));

calloc хорош тем, что у него кол-во элементов и размер структуры задаются отдельными параметрами и он зануляет массив (очень часто ошибки возникают из за того, что массив не был занулен и содержал мусор)

→ Ссылка