Присвоение выражению с ошибкой типа массива, значение массива char невозможно установить в переменной структуры - PullRequest
0 голосов
/ 14 февраля 2020

Я беру очень базовый c C курс, и я столкнулся с проблемой. Мой код должен взять чью-то информацию, создать профиль, а затем распечатать информацию в конце. Вот мой код:

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

    typedef struct record
    {
    char lastname[30];
    char firstname[30];
    int id;
    char gender;
    int monthOfBirth;
    int dayOfBirth;
    int yearOfBirth;
    } HealthProfile;

    void setID(HealthProfile *HPP){
    int id;
    printf("please enter your ID: ");
    scanf("%d", &id);
    HPP->id=id;
    }

    void setGender(HealthProfile *HPP){
    char gender;
    printf("please enter yomeur M or F for your gender: ");
    scanf("%c",&gender);
    HPP->gender=gender;
    }

    void setFirstName(HealthProfile *HPP){
    char firstname[30];
    printf("please enter your first name: ");
    scanf("%s",&firstname);
    HPP->firstname=firstname;
    }

    void setLastName(HealthProfile *HPP){
    char lastname[30];
    printf("please enter your last name: ");
    scanf("%s",&lastname);
    HPP->lastname=lastname;
    }

    void setDoB(HealthProfile *HPP){
    int dayOfBirth;
    printf("please enter your DoB: ");
    scanf("%d", &dayOfBirth);
    HPP->dayOfBirth=dayOfBirth;
    }


    void setMoB(HealthProfile *HPP){
    int monthOfBirth;
    printf("please enter your MoB: ");
    scanf("%d", &monthOfBirth);
    HPP->monthOfBirth=monthOfBirth;
    }


    void setYoB(HealthProfile *HPP){

    int yearOfBirth;
    printf("please enter your YoB: ");
    scanf("%d", &yearOfBirth);
    HPP->yearOfBirth=yearOfBirth;
    }

    int main()
   {
    HealthProfile *HPP;
    HPP=(HealthProfile*) malloc(sizeof(HealthProfile));

    setID(HPP);
    setGender(HPP);
    setLastName(HPP);
    setFirstName(HPP);
    setDoB(HPP);
    setMoB(HPP);
    setYoB(HPP);

    printf("\n Profile information.....");
    printf("ID number: %d\n", HPP->id);
    printf("Gender: %c\n", HPP->gender);
    printf("Name: %s/n",HPP->firstname);
    printf("  %s", HPP->lastname);
    printf("Month of birth: %d\n", HPP->monthOfBirth);
    printf("Day od birth: %d\n", HPP->dayOfBirth);
    printf("Year of birth: %d\n", HPP->yearOfBirth);
   }

Часть, которая дает мне ошибку, состоит из следующих двух строк:

    **HPP->lastname=lastname;**

и

    **HPP->firstname=firstname;**

Всякий раз, когда я пытаюсь запустите его, знак равенства выделен красным, и мой код выдаст мне ошибку «присваивание выражению с типом массива». Даже после того, как я посмотрел его и попробовал в течение почти двух часов, я не мог этого понять, поэтому кто-нибудь может мне помочь, пожалуйста?

1 Ответ

1 голос
/ 14 февраля 2020

Поля HPP->lastname и HPP->firstname оба являются массивами, и, поскольку в сообщении об ошибке указано, что вы не можете напрямую назначить массив.

Способ, которым вы копируете одну строку в другую, заключается в использовании strcpy function:

strcpy(HPP->firstname, firstname);

Конечно, вы можете полностью избавиться от копии и прочитать непосредственно в целевой массив вместо временного.

scanf("%s", HPP->firstname);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...