我现在有一个函数inet_ntoa返回的是char*型的,假如这个返回值变量是a,我想在switch循环里,把判断条件改成
char*a = inet_ntoa(addrClient.sin_addr);
switch(&a)
case "192.168.1.1"
语句1;
break;
case "192.168.1.2"
语句2;
break;
case "192.168.1.3"
语句3;
break;
这样的效果,报错,反正switch里面用&不行,case后面也不是常量(我纳闷了,一个字符型的为什么不是常量)。请问怎么改?
(PS:原先是这样的,在if里面判断strcmp(inet_ntoa(addrClient.sin_addr), "192.168.1.1")),
if(!strcmp(inet_ntoa(addrClient.sin_addr), "192.168.1.1")))
语句1;
else(!strcmp(inet_ntoa(addrClient.sin_addr), "192.168.1.2"))
语句2;
如果返回0说明inet_ntoa函数返回的指针指向的和后面那个指针一样。总之呢,就是想把嵌套的if改成switch,怎么办?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
net_ntoa函数返回的是一个临时的指针, 和你case语句的常量没有任何的关系,而且他们永远也不可能相等;
就像 你定义一个变量 a = 100; 又定义一个变量b =100; 你能说a和b的值相等,他们在内存中存放的地址就相同么?显而易见是不同的;
在C语言中, 一般对两个字符串相比较是否相等可以用strcmp函数来判断,不直接把他们的指针地址直接用逻辑运算符==还判断 ;
你的问题这种情况,可以用if语句来写:
char*a = inet_ntoa(addrClient.sin_addr);
if(strcmp(a, "192.168.1.1") == 0)
{
语句1;
return;
}
if(strcmp(a, "192.168.1.2")==0)
{
语句2;
return
}
if(strcmp(a, "192.168.1.3")==0)
{
语句3;
return;
}