错误:分配到类型'char [20]'时不兼容的类型

时间:2014-12-22 13:26:03

标签: c arrays pointers

代码:

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";时不兼容的类型

为什么会这样?

3 个答案:

答案 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");

您必须非常小心源字符串的长度不大于目标字符串的长度。