技术解析

如何检测接口的指针参数为空?
0
2021-06-22 08:52:06
idczone
#include
#include

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

局部变量是未初始化的,不一定是 NULL

那该如何检测通过 api 传进来的指针是否为空呢?

检测指针为空的方法没有问题,应该让 api 确保传入的指针为 NULL 或一个有效的值

多谢了。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服