2016-07-28 35 views
-5

我正试图在公历上创建一个程序,但是当我尝试将月份名称分配给字符串if in else block以及switch case时,代码块在运行时停止响应。交换机内部字符串的分配或如果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; 
} 

同样,当我习惯在开关的情况下分配的字符串值,那么原因是什么,也发生了运行时错误

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

+0

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

回答

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"); 
} 
2

Cstrcpy()是赋值给strings的正确方法。

Try:strcpy(month1, "YourMonth")