gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:05:49 25 4
gpt4 key购买 nike

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com