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

2018-12-10 20:51:44 +08:00
 z0z
#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
1815 次点击
所在节点    Linux
4 条回复
pursuer
2018-12-10 20:56:16 +08:00
局部变量是未初始化的,不一定是 NULL
z0z
2018-12-10 21:02:51 +08:00
@pursuer 那该如何检测通过 api 传进来的指针是否为空呢?
pursuer
2018-12-10 21:08:17 +08:00
@z0z 检测指针为空的方法没有问题,应该让 api 确保传入的指针为 NULL 或一个有效的值
z0z
2018-12-11 06:27:49 +08:00
@pursuer 多谢了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/516278

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX