Chaos Amv
Chaos Amv

Reputation: 3

Assignment to expression with array type error, char array value unable to be set to a variable in structure

I am taking a very basic C course, and I have run into a problem. My code is supposed to take someone's info, create a profile, and then print the information at the end. Here is my code:

    #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);
   }

The part that is giving me the error is these two lines:

    **HPP->lastname=lastname;**

and

    **HPP->firstname=firstname;**

Whenever I try to run it the equal sign is highlighted red and my code gives me the "assignment to expression with array type" error. Even after looking it up and trying things for almost two hours I couldn't figure it out, so can someone help me, please?

Upvotes: 0

Views: 38

Answers (1)

dbush
dbush

Reputation: 225737

The fields HPP->lastname and HPP->firstname are both arrays, and as the error message states you cannot assign directly to an array.

The way you copy one string to another is to use the strcpy function:

strcpy(HPP->firstname, firstname);

Of course, you can get rid of the copy altogether and read directly into the target array instead of a temporary.

scanf("%s", HPP->firstname);

Upvotes: 1

Related Questions