这是什么原因?我认为如果指针为空,则不会评估其余条件。
// 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')
// ...
这是什么原因?我认为如果指针为空,则不会评估其余条件。
// 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')
// ...
ptr && ptr[0] == '1' || ptr[0] == 't'
方法:
ptr && ptr[0] == '1'
(false, 因为ptr
是 null 并且ptr[0] == '1'
不被评估)ptr[0] == 't'
(繁荣)利用:
ptr && (ptr[0] == '1' || ptr[0] == 't')
反而。
您的评估顺序不正确。这将起作用:
if (ptr && (ptr[0] == '1' || ptr[0] == 't'))
基本上,任何时候你的代码中都有这两者&&
,||
你需要一个括号来确保它符合你的意思。
您有 Null ptr && dereferenced Null ptr 这会导致段错误。
C 让您可以选择让 if (ptr == NULL) 之类的语句做某事;如果在检测到空指针时它总是将条件评估为假,那么这样的语句将不起作用。