Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
z0z
V2EX  ›  Linux

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

  •  
  •   z0z · Dec 10, 2018 · 2825 views
    This topic created in 2893 days ago, the information mentioned may be changed or developed.
    #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 replies  •  2018-12-11 06:27:49 +08:00
    pursuer
    pursuer
    Dec 10, 2018
    1
    局部变量是未初始化的,不一定是 NULL
    z0z
    z0z
    OP
    Dec 10, 2018
    2
    @pursuer 那该如何检测通过 api 传进来的指针是否为空呢?
    pursuer
    pursuer
    Dec 10, 2018
    3
    @z0z 检测指针为空的方法没有问题,应该让 api 确保传入的指针为 NULL 或一个有效的值
    z0z
    z0z
    OP
    Dec 11, 2018
    4
    @pursuer 多谢了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4188 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 03:47 · PVG 11:47 · LAX 19:47 · JFK 22:47
    ♥ Do have faith in what you're doing.