C 开关或if else块内字符串的赋值
我试图在公历上制作一个程序,但当我尝试在if-else块和switch-case中为字符串指定月份名称时,代码块在运行时停止响应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]="
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,具体取决于您的代码版本。此外,您不能以这种方式分配字符串。您声明的是字符数组,而不是字符数组数组。