在switch或if else块中分配字符串

时间:2016-07-28 15:48:31

标签: c

我试图在gregorian日历上创建一个程序,但是当我尝试在if else块中分配月份名称以及切换大小写时,代码块在运行时停止响应。

 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;
}

同样,当我习惯在switch case中分配字符串值时,也会发生运行时错误

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];
}

为什么会这样?

2 个答案:

答案 0 :(得分:5)

您不会像这样分配C字符串,因为字符串是以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");
}

答案 1 :(得分:2)

C中,strcpy()是将值分配给strings的正确方法。

尝试:strcpy(month1, "YourMonth")