如果我有这样的事情
if(pointer!=NULL&&(*pointer)==x) { ... }
如果指针为NULL,它会出现段错误吗?如果它是特定于编译器的,我想知道它在 GCC 中的情况。
如果我有这样的事情
if(pointer!=NULL&&(*pointer)==x) { ... }
如果指针为NULL,它会出现段错误吗?如果它是特定于编译器的,我想知道它在 GCC 中的情况。
不,因为短路评估。
如果 LHS 为false,则不会评估 RHS。因此,如果它是一个NULL
指针,它永远不会命中 RHS 并尝试取消引用它。
如果&&
使用,则仅当第一个条件为 时才会执行第二个条件TRUE
。这永远不会导致分段错误。
我们也可以进行同样的检查||
。
if ((pstr_buf == NULL) || (pstr_buf[0] == '\0'))
{
printf("\ninvalid string buffer\n");
}