为什么这个条件会导致seg错误?

use*_*521 1 c pointers dereference

这是什么原因?我认为如果指针为null,则不会评估其余条件.

// doesn't work:
char *ptr = somefunction();

if (ptr && ptr[0] == '1' || ptr[0] == 't')
  // ...



// does work:
char *ptr = somefunction();
if (ptr)
    if (ptr[0] == '1' || ptr[0] == 't')
        // ...
Run Code Online (Sandbox Code Playgroud)

rid*_*rid 5

ptr && ptr[0] == '1' || ptr[0] == 't'
Run Code Online (Sandbox Code Playgroud)

手段:

  • if ptr && ptr[0] == '1'(false,因为ptr是null并且ptr[0] == '1'没有得到评估)
  • 或者ptr[0] == 't'(繁荣)

使用:

ptr && (ptr[0] == '1' || ptr[0] == 't')
Run Code Online (Sandbox Code Playgroud)

代替.