Выделение памяти для вложенных структур

Уже весь интернет облазила пока эту программу писала, но всё равно выдают ошибки.


const expr auto MAXS = 125;

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <string.h>

struct year {
    char name[64];//содержит имя работников
    char surname[10];//содержит фам. работников
    struct year* NextYear;//указатель на следующий эл
};
struct profession {
    struct profession* NextProfes;//указатель на следующий эл
    int num;
    char profes[30];//содержит профессии работников
    char age[10];//содержит стаж работников
    struct year* firstYear; //указатель на следующий эл
    //struct year* lastYear;//указатель на предыдущ эл
};
struct profession* Head = NULL;
/////////////////////////////////
struct profession* FindTailProfes(struct profession* Head)
{
    struct profession* temp = Head;
    while (temp->NextProfes != NULL)
    {
        temp = temp->NextProfes;
    }
    return temp;
}
////////////////////////////////
struct profession* GetProfesData()
{
    /*char data[30];
    int data_num[20];*/
    struct profession* temp;
    struct profession pro[MAXS];
    temp = (struct profession*)malloc(sizeof(struct profession)); // выделение памяти под корень списка
    const int amounOfInf = 5;
    if (temp) {
        for (int i = 0; i < amounOfInf; i++) {
            printf("Введите профессию работника: ");
            scanf("%s", &pro[i].profes);//scanf("%s",data);-предыдущий код
            /*strcpy(temp->profes, data);*/
            printf("Стаж: ");
            scanf("%s", &pro[i].age);//scanf("%s",data_num);-предыдущий код
            /*strcpy(temp->age, data);*/
            temp->NextProfes = NULL;
        }
    }

    return temp;
}
/////////////////////////////
struct year* GetYearData()
{
    struct year* temp;
    struct year years[MAXS];
    //char data[30];
    temp = (struct year*)malloc(sizeof(struct year)); // выделение памяти под корень списка
    const int amounOfInf = 5;
    if (temp)
    {
        for (int i = 0; i < amounOfInf; i++)
        {

            printf("Введите имя работника: ");
            scanf("%s", &years[i].name);// scanf("%s", data) -предыдущ код
            //strcpy(temp->name, data);
            printf("Введите фамилию работника: ");
            scanf("%s", &years[i].surname);//scanf("%s", data)-предыдущий код
            //strcpy(temp->surname, data);
            temp->NextYear = NULL;
        }
    }
     return temp;
}
//добавление элементов из profession в список 
void AddProfes(struct profession** Head, int num, char pr_profes[30], char pr_age[10]) {
    if ((*Head)==NULL)
    {
        *Head = malloc(sizeof(struct profession));
        strcpy((*Head)->profes,pr_profes);
        strcpy((*Head)->age,pr_age);
        (*Head)->NextProfes = NULL;
        (*Head)->firstYear;
    }
    else
    {
        struct profession* temp;
        temp = (*Head);
        while (temp->NextProfes)
        {
            temp = temp->NextProfes;
            (temp->NextProfes) = malloc(sizeof(struct profession));
            strcpy(temp->NextProfes->profes, pr_profes);
            strcpy(temp->NextProfes->age, pr_age);
            temp->NextProfes->NextProfes = NULL;
            temp->NextProfes->firstYear = NULL;
        }
    }
}   
//Объединение двух структур
void AddProfesToYear(struct profession * Head, char yr_name[64],char yr_surname[10])
{
    struct year* yr = malloc(sizeof(struct year));
    strcpy(yr->name, yr_name);
    strcpy(yr->surname, yr_surname);
    yr->NextYear = NULL;
    if (Head->firstYear = NULL) {
        Head->firstYear = yr;
    }
    else
    {
        struct year* node = Head->firstYear;
        while (node->NextYear !=NULL) node = node->NextYear;
        node->NextYear = yr;
    }
}
//Отображение структур в консольном окне
void display(struct profession * Head)
{  
    int i = 1, b = 1;
    struct profession* temp = Head;
  if (temp == NULL)
    {
        printf("\nСписок пуст");
    }
    else if (temp !=NULL)
    {  
      printf("%s %s",temp->profes,temp->age);
      struct year* tempYe = Head->firstYear;
        while (tempYe != NULL)
        {   
            printf("%s",tempYe->name);
            printf("%s", tempYe->surname);
            struct year* tempYe = temp->firstYear;
            b++;
        }
        temp = temp->NextProfes;
        i++;
        //printf("\n");
    }
}
void pechat() {
    system("chcp 1251");
    system("cls");
    const char vid[] =
        "+==========================================+\n"
        "|       ФИО           | Вид      |         |\n"
        "|=====================| профессии|  стаж   |\n"
        "|  ИМЯ  |   фамилия   |          |         |\n"
        "+=====================+==========+=========+\n";
    
}
int main()
{
    system("chcp 1251");
    system("cls");
    struct profession* list = NULL;
    char name[64];//содержит имя работников
    char surname[10];
    int num;
    char profes[30];//содержит профессии работников
    char age[10];

    pechat();
    GetProfesData();
    GetYearData();
    display(list);
    
   
    return 0;
}

Ошибки следующие введите сюда описание изображения


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

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

Перечитал ещё раз. Похоже Вы просто компилируете плюсовым компилятором. К сожалению, Вы сделали плохо и скрыли имена файлов, но подозревают, что там просто .cpp. Переименуйте их в .c и компилятор автоматически будет сишный.

---- если все таки нужно плюсовым компилятором ----

malloc возвращает void*. В си такой указатель можно легко присвоить другому. А в плюсах - нет. Поэтому, нужно явно писать

*Head = (profession*)malloc(sizeof(struct profession));

или ещё лучше так

*Head = static_cast<profession*>(malloc(sizeof(profession)));

в плюсах не нужно перед типом структуры писать struct.

→ Ссылка