我现在有一个函数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,怎么办?
switch(condition)
condition职能是基本数据类型的,不能是指针。所以还是用if吧
你把char型的a在switch外边做成String类型,然后放到switch里边不就可以了。
switch 括号里面不能是字符串. 所以你这样写是不正确的. 况且你的是&a 是地址吧. 和下面的case完全不符吧.
C++对switch类型有限制,不能用字符串,你需要用一些其他方法
The condition shall be of integral type, enumeration type, or of a class type for which a single conversion function to integral or enumeration type exists (12.3). If the condition is of class type, the condition is converted by calling that conversion function, and the result of the conversion is used in place of the originalcondition for the remainder of this section.
http://bbs.csdn.net/topics/370108299
inet_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;
}
switch 括号里面不能是字符串
你还是用if/else来写吧
Swift的话switch判断条件可以是String,C++是不行的吧
你还是用if/else来写吧,用stricmp比较,返回0则是一样的,否则不一样