Присвояване на израз с грешка в типа на масива, стойността на масив от char не може да бъде зададена на променлива в структурата

Взимам много основен курс по С и се натъкнах на проблем. Моят код трябва да вземе нечия информация, да създаде профил и след това да отпечата информацията в края. Ето моят код:

    #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;**

Всеки път, когато се опитам да го стартирам, знакът за равенство се маркира в червено и кодът ми дава грешка „присвояване на израз с тип масив“. Дори след като го потърсих и опитах нещата в продължение на почти два часа, не можах да го разбера, така че може ли някой да ми помогне, моля?


person Chaos Amv    schedule 14.02.2020    source източник
comment
Използвайте strcpy за копиране на низове.   -  person kaylum    schedule 14.02.2020


Отговори (1)


И двете полета HPP->lastname и HPP->firstname са масиви и както се посочва в съобщението за грешка, не можете да присвоите директно към масив.

Начинът, по който копирате един низ в друг, е да използвате функцията strcpy:

strcpy(HPP->firstname, firstname);

Разбира се, можете да се отървете изцяло от копието и да четете директно в целевия масив, вместо във временен.

scanf("%s", HPP->firstname);
person dbush    schedule 14.02.2020
comment
Още един въпрос/проблем. Това изглежда поправи тази грешка, но сега имам очаквана '=', ',', ';', 'asm' или 'attribute' преди '-›' грешка на маркера на стрелката на вторият коригиран ред. Това е единственото нещо, което промених, така че не знам защо. Някакви идеи? - person Chaos Amv; 14.02.2020