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

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

  •  
  •   z0z · 72 天前 · 620 次点击
    这是一个创建于 72 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #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   72 天前
    局部变量是未初始化的,不一定是 NULL
        2
    z0z   72 天前
    @pursuer 那该如何检测通过 api 传进来的指针是否为空呢?
        3
    pursuer   72 天前
    @z0z 检测指针为空的方法没有问题,应该让 api 确保传入的指针为 NULL 或一个有效的值
        4
    z0z   71 天前
    @pursuer 多谢了。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   905 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 21ms · UTC 19:53 · PVG 03:53 · LAX 11:53 · JFK 14:53
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1