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

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

  •  
  •   z0z · 2018-12-10 20:51:44 +08:00 · 1928 次点击
    这是一个创建于 2175 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #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
    pursuer
        1
    pursuer  
       2018-12-10 20:56:16 +08:00
    局部变量是未初始化的,不一定是 NULL
    z0z
        2
    z0z  
    OP
       2018-12-10 21:02:51 +08:00
    @pursuer 那该如何检测通过 api 传进来的指针是否为空呢?
    pursuer
        3
    pursuer  
       2018-12-10 21:08:17 +08:00
    @z0z 检测指针为空的方法没有问题,应该让 api 确保传入的指针为 NULL 或一个有效的值
    z0z
        4
    z0z  
    OP
       2018-12-11 06:27:49 +08:00
    @pursuer 多谢了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1902 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 00:26 · PVG 08:26 · LAX 16:26 · JFK 19:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.