c - 我如何将该字符串指向该结构?

标签 c pointers struct

#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 代替。正如您在性别函数中失败的尝试所看到的。

有人可以帮我纠正我的错误吗?谢谢

最佳答案

正如您所发现的,您不能直接分配给数组。特别是对于字符串,您需要使用 strcpy 将字符串从一个数组复制到另一个数组。

此外,gender 是单个字符,而不是数组。因此,将 &gender 传递给 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);
}

对读取 firstnamelastname 执行相同的操作。

关于c - 我如何将该字符串指向该结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60174632/

相关文章:

c - C 中所有固定长度的二进制排列

c - 声明和访问二维数组

C - 跨多个文件的结构

c++ - 关于c++中二元函数的参数

c - 将结构赋予带有指针的函数

c - 如何使用指针遍历结构中的内存块?

c - 如何在结构体中初始化 int 指针并将其分配给 C 中的数组?

c - (c) 表达式必须是可修改的左值

c - 指向 C 中结构的指针

C 指针算术填充结构