首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Coding
V2EX  ›  Linux

如何检测接口的指针参数为空?

  •  
  •   z0z · 2018-12-10 20:51:44 +08:00 · 951 次点击
    这是一个创建于 366 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #include<stdio.h>
    #include<stdlib.h>
    
    typedef struct 
    {
      int age;
    }test_t;
    
    void test2(test_t *test2_val)
    {
      if(!test2_val)
      {
        printf("test2_val=null.\n");
      }
      else
      {
        printf("test2_val != null\n");
      }
    }
    
    int test(test_t *test_val)
    {
      test_t *bbb;
    
      if(!test_val)
      {
        printf("val=null.\n");
      }
      else
      {
        printf("val != null\n");
      }
    
      test2(bbb);
      return 0;
    }
    
    void fun(test_t *fun_val)
    {
      test_t *bbb;
            
      test(fun_val);
    
      printf("call test(bbb)--->\n");
      test(bbb);
      printf("<-----\n");
      
    }
    
    int main(void)
    {
      test_t *aaa;
    
      fun(aaa);
      printf("------after------>\n");
    
      test(aaa);
    }
    

    下面是上面这段代码的运行结果,编译和运行环境是 gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)。 我的疑问是为什么会有!=null 这样的打印?

    val=null.
    test2_val != null
    call test(bbb)--->
    val=null.
    test2_val != null
    <-----
    ------after------>
    val=null.
    test2_val != null
    
    4 回复  |  直到 2018-12-11 06:27:49 +08:00
        1
    pursuer   2018-12-10 20:56:16 +08:00
    局部变量是未初始化的,不一定是 NULL
        2
    z0z   2018-12-10 21:02:51 +08:00
    @pursuer 那该如何检测通过 api 传进来的指针是否为空呢?
        3
    pursuer   2018-12-10 21:08:17 +08:00
    @z0z 检测指针为空的方法没有问题,应该让 api 确保传入的指针为 NULL 或一个有效的值
        4
    z0z   2018-12-11 06:27:49 +08:00
    @pursuer 多谢了。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1450 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 30ms · UTC 17:16 · PVG 01:16 · LAX 09:16 · JFK 12:16
    ♥ Do have faith in what you're doing.