开发者社区> 问答> 正文

switch循环的一个小bug

我现在有一个函数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,怎么办?

展开
收起
a123456678 2016-03-05 14:42:21 3533 0
1 条回答
写回答
取消 提交回答
  • 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;
    }

    2019-07-17 18:53:29
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载