C 字符串不打印

C 字符串不打印,c,string,C,String,在这个程序中,我必须生成一个随机数,如果这个数是1,我必须以可变颜色存储绿色,如果是0,我必须存储红色,然后打印结果 #include<stdio.h> #include<time.h> int main () { int rn; rn=Switch(); Display(rn); return 0; } int Switch() { int rn; srand(time(NULL)); rn=rand()%2;

在这个程序中,我必须生成一个随机数,如果这个数是1,我必须以可变颜色存储绿色,如果是0,我必须存储红色,然后打印结果

#include<stdio.h>
#include<time.h>
int main ()
{
    int rn;
    rn=Switch();
    Display(rn);
    return 0;
}
int Switch()
{
    int rn;
    srand(time(NULL));
    rn=rand()%2;
    return rn;
}
int Display(int rn)
{
    char colour[5];
    if (rn==1)
    {
        colour[5]="green";
    }
    else
    {
        colour[5]="red";
    }
    printf("Random number : %d\nColour : %c",rn,colour);
}
但当我运行程序时,它会打印随机数,而不会打印颜色

colour[5]="green";

由于多种原因,导致访问数组颜色超出范围,并试图将字符串文字指定给字符

您实际上不需要数组。只需使用指针:

char *colour;
if (rn == 1) {
    colour="green";
} else {
    colour="red";
}
printf("Random number : %d\nColour : %s", rn, colour);

将数组声明更改为字符颜色[32]={0}

使用strcpy颜色,绿色;代替颜色[5]=绿色;红色也是如此


打印时使用%s而不是%c..

将字符串打印到数组的第五个字符中,该字符不是数组的一部分。。。。小心那些鼻魔。此外,您的数组对于字符串来说也太小了。您需要在启用警告的情况下编译-Wall for gcc/clang,然后修复所有警告。@KamiKaze我该怎么做?然后在启用警告的情况下编译。这会在您写入的字符数超过数组中的插槽数时产生另一个问题。是的,在绿色的情况下,数组大小需要增加,对吗?我建议您在答案中写下这一点,以使其正确。
char *colour;
if (rn == 1) {
    colour="green";
} else {
    colour="red";
}
printf("Random number : %d\nColour : %s", rn, colour);