#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);
}
对读取 firstname
和 lastname
执行相同的操作。
关于c - 我如何将该字符串指向该结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60174632/