Как я могу указать эту строку на структуру? - PullRequest
0 голосов
/ 11 февраля 2020
#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! \n");
    printf("Profile created for: %s\n", HP->firstName);
    printf("Lastname: %s\n", HP->lastName);
    // prints ID 
    printf("ID: %d\n", HP->id);
    printf("Gender: %s\n", HP->gender);
    printf("Month of birth: %d\n", HP->monthOfBirth); 
    printf("day of birth: %d\n", HP->dayOfBirth);
    printf("year of birth: %d\n", HP->yearOfBirth);
} 

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 11 февраля 2020

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

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

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

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

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

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

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

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

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

0 голосов
/ 11 февраля 2020

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...