Code Bye

这个警告怎么解决

#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进行拷贝

5

printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方,而且通常编译还不出错。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

20

char *colorName=NULL;
改成
const char *colorName=NULL;

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明这个警告怎么解决