Как я могу указать эту строку на структуру?

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


    typedef struct{
    char firstName[20];
    char lastName[20];
    int id; 
    char gender[10]; 
    int monthOfBirth; 
    int dayOfBirth; 
    int yearOfBirth; 
    } HealthProfile;


void setName(HealthProfile *HP) {
    char firstName;
    char lastName; 
    printf("Enter your first and last name: ");
    scanf("%s" "%s", &firstName, &lastName);
    HP->firstName = firstName;
    HP->lastName = lastName; 
}

void setID(HealthProfile *HP) {
    int id; 
    printf("Enter ID: ");
    scanf("%d", &id);
    HP->id = id;
}

void setGender(HealthProfile *HP) {
    char gender;
    // HealthProfile hp;
   // strcpy(hp.gender, &gender); 
    printf("Enter your gender: ");
    scanf("%s", &gender);

    HP->gender = gender;

}
void setBD(HealthProfile *HP) {
    int monthOfBirth;
    int dayOfBirth;
    int yearOfBirth; 
    printf("Enter your month of birth, day of birth and year of birth: ");
    scanf("%d" "%d" "%d", &monthOfBirth, &dayOfBirth, &yearOfBirth);
    HP->monthOfBirth = monthOfBirth;
    HP->dayOfBirth = dayOfBirth;
    HP->yearOfBirth = yearOfBirth; 
}

int main(){
    // pointer declared to HealthProfile structure 
    HealthProfile *HP;
    // pointer initialized using malloc 
    HP = (HealthProfile*) malloc(sizeof(HealthProfile));

// Calls various functions

    setID(HP); 
    setGender(HP);
    setName(HP);
    setBD(HP);

    // Creates your profile
    printf("Creating your Health Profile! 
");
    printf("Profile created for: %s
", HP->firstName);
    printf("Lastname: %s
", HP->lastName);
    // prints ID 
    printf("ID: %d
", HP->id);
    printf("Gender: %s
", HP->gender);
    printf("Month of birth: %d
", HP->monthOfBirth); 
    printf("day of birth: %d
", HP->dayOfBirth);
    printf("year of birth: %d
", HP->yearOfBirth);
} 

Я пытаюсь назначить HP строке, но я получаю эту ошибку.

array type 'char [10]' is not assignable
    HP->gender = gender;

(та же ошибка, что и с именем и фамилией, конечно). Поэтому я искал в Интернете и обнаружил, что нельзя назначить char, и вместо этого следует использовать strcpy. Как вы можете видеть по моей неудачной попытке в функции пола.

Может ли кто-нибудь помочь мне исправить мои ошибки? Благодарность

Всего 2 ответа


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

Кроме того, gender - это отдельный символ, а не массив. Таким образом, передача &gender scanf to scanf приведет к тому, что функция будет рассматривать ее как указатель на последовательность символов, а не только на один, что приведет к записи функции за пределы памяти переменной.

Вы можете исправить это, сделав gender массивом правильного размера:

void setGender(HealthProfile *HP) {
    char gender[10];
    printf("Enter your gender: ");
    scanf("%s", gender);
    strcpy(HP->gender, gender);
}

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

void setGender(HealthProfile *HP) {
    printf("Enter your gender: ");
    scanf("%s", HP->gender);
}

И сделайте то же самое для чтения имени и lastname .


char gender; - gender не массив. Это только один объект типа char .

Таким образом, HP->gender = gender; не работает, потому что gender не распадается на указатель на char как сделал бы массив.

Измените его на char gender[10] .