#include<stdio.h> const int red=0; const int yellow=1; const int green=2; int main(int argc,char const *argv[]){ int color=-1; char *colorName=NULL; printf("输入你喜欢的颜色代码:"); scanf("%d",&color); switch(color){ case red:colorName="red";break; case yellow:colorName="yellow";break; case green:colorName="green";break; default:colorName="nuknown";break; } printf("你喜欢的颜色是%s\n",colorName); return 0; }
[Warning] deprecated conversion from string constant to “char*” [-Wwrite-strings]
解决方案
5
switch里面 case123吧
20
这句warning是针对你case中 colorName=“red”形式而提示的,目的在于提示不建议将char*指向常字符串。
原因是常字符串为了优化通常村存在符号表中,也就意味着不能修改。
你使用非const的char*指向它,很有可能在后面进行修改,从而引发错误。
解决办法可使用strcpy进行拷贝
原因是常字符串为了优化通常村存在符号表中,也就意味着不能修改。
你使用非const的char*指向它,很有可能在后面进行修改,从而引发错误。
解决办法可使用strcpy进行拷贝
5
printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方,而且通常编译还不出错。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方,而且通常编译还不出错。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
20
char *colorName=NULL;
改成
const char *colorName=NULL;
改成
const char *colorName=NULL;