C 开关或if else块内字符串的赋值

C 开关或if else块内字符串的赋值,c,C,我试图在公历上制作一个程序,但当我尝试在if-else块和switch-case中为字符串指定月份名称时,代码块在运行时停止响应 int main() { int month,year; scanf("%d %d",&month,&year); char month1[10]; if(month==1) month1[10]="January"; else if(month==2) month1[10]="

我试图在公历上制作一个程序,但当我尝试在if-else块和switch-case中为字符串指定月份名称时,代码块在运行时停止响应

 int main()
{
    int month,year;
    scanf("%d %d",&month,&year);
    char month1[10];
    if(month==1)
        month1[10]="January";
    else if(month==2)
        month1[10]="February";
    else if(month==3)
        month1[10]="March";
    else if(month==4)
        month1[10]="April";
    else if(month==5)
        month1[10]="May";
    else if(month==6)
        month1[10]="June";
    else if(month==7)
        month1[10]="July";
    else if(month==8)
        month1[10]="August";
    else if(month==9)
        month1[10]="September";
    else if(month==10)
        month1[10]="October";
    else if(month==11)
        month1[10]="November";
    else if(month==12)
        month1[10]="December";
    printf("%s %d",month1,year);
    return 0;
}
类似地,当我在开关情况下分配字符串值时,也会发生运行时错误

main()
{
    int month,year;
    scanf("%d %d",&month,&year);
    char month1[15];
    switch(month)
    {
    case 1:
        month1[15]="January";
        break;
    case 2:
        month1[15]="February";
        break;
    case 3:
        month1[15]="March";
        break;
    case 4:
        month1[15]="April";
        break;
    case 5:
        month1[15]="May";
        break;
    case 6:
        month1[15]="June";
        break;
    case 7:
        month1[15]="July";
        break;
    case 8:
        month1[15]="August";
        break;
    case 9:
        month1[15]="September";
        break;
    case 10:
        month1[15]="October";
        break;
    case 11:
        month1[15]="November";
        break;
    case 12:
        month1[15]="December";
        break;
    default:
        printf("wrong input");
    }
    printf("%s %d",month1,year);
    //char calender[6][7];
}

为什么会发生这种情况?

您不会像这样分配C字符串,因为字符串是作为以null结尾的
char
值序列实现的。如果所有可能的值都是字符串文字,则可以使用
char*
指针,如下所示:

char *month1;
if(month==1)
    month1="January";
else if(month==2)
    month1="February";
...
但是,更好的方法是构建查找表,并使用数组下标运算符获取月份名称:

char *months[] = {"January", "February", "March", ...}
if (month >=1 && month <= 12) {
    printf("%s %d", months[month-1], year);
} else {
    printf("wrong input");
}
char*months[]={“一月”、“二月”、“三月”、…}

如果
C
中的(月>=1&&month,
strcpy()
是为
字符串赋值的正确方法


请尝试:
strcpy(month1,“YourMonth”)

首先,数组溢出;月份数组的最大索引为9或14,具体取决于您的代码版本。此外,您不能以这种方式分配字符串。您声明的是字符数组,而不是字符数组数组。