代码:
struct
{
char firstname[10];
char lastname[10];
char passfail[20];
int score;
}student_mark;
/*Get student details*/
printf("Hello user, please enter your forename\n");
scanf("%s", student_mark.firstname);
printf("\n..and your surname?\n");
scanf("%s", student_mark.lastname);
printf("\n\nHow about your mark out of 10 for the year?\n");
scanf("%d", &student_mark.score);
if (student_mark.score >= 8)
{
student_mark.passfail="DISTINCTION\n";
}
else if (student_mark.score >= 6)
{
student_mark.passfail="PASS\n";
}
else if(student_mark.score <=5)
{
student_mark.passfail="FAIL\n";
}
printf("First name = %s\n", student_mark.firstname);
printf("Last name = %s\n", student_mark.lastname);
printf("Achieved: = %s\n", student_mark.passfail);
return 0;
}
当我运行此代码时,它会向我发出警告:从类型char[20]
分配到类型char * student_mark.passfail="DISTINCTION\n";
时不兼容的类型
为什么会这样?
答案 0 :(得分:7)
复制字符串时,不得使用=
运算符。您需要使用strcpy()
。
供您参考,student_mark.passfail
是静态分配的数组。使用
student_mark.passfail="DISTINCTION\n";
您要做的是将字符串"DISTINCTION\n"
的基地址复制到student_mark.passfail
变量。但是,这是不可能的,因为您无法更改静态分配变量的地址。
OTOH,如果将student_mark.passfail
定义为char
指针而不是char
数组,那么它就可以被允许
student_mark.passfail="DISTINCTION\n";
因为你会使用student_mark.passfail
指针来保存字符串"DISTINCTION\n"
的基地址。
答案 1 :(得分:2)
您无法直接为变量赋值。您可以使用strcpy函数或sprintf函数。
strcpy(char *dest,char *src);
sprintf(student_mark.passfail,"DISTINCTION\n");
答案 2 :(得分:2)
您无法分配数组,在C中您必须使用strcpy
以这种方式将字符串的内容复制到数组中
strcpy(student_mark.passfail, "DISTINCTION\n");
您必须非常小心源字符串的长度不大于目标字符串的长度。