2

如果我有这样的事情

    if(pointer!=NULL&&(*pointer)==x) { ... }

如果指针为NULL,它会出现段错误吗?如果它是特定于编译器的,我想知道它在 GCC 中的情况。

4

2 回答 2

10

不,因为短路评估

如果 LHS 为false,则不会评估 RHS。因此,如果它是一个NULL指针,它永远不会命中 RHS 并尝试取消引用它。

于 2013-01-08T10:59:12.140 回答
1

如果&&使用,则仅当第一个条件为 时才会执行第二个条件TRUE。这永远不会导致分段错误。

我们也可以进行同样的检查||

if ((pstr_buf == NULL)  || (pstr_buf[0] == '\0'))
{
   printf("\ninvalid string buffer\n");
}
于 2013-01-08T11:09:17.990 回答