[英]Why does this conditional cause a seg fault?
这是什么原因呢? 我认为如果指针为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')
// ...
ptr && ptr[0] == '1' || ptr[0] == 't'
手段:
ptr && ptr[0] == '1'
(错误,因为ptr
为空并且ptr[0] == '1'
没有得到评估) ptr[0] == 't'
(景气) 采用:
ptr && (ptr[0] == '1' || ptr[0] == 't')
代替。
您的评估顺序不正确。 这将起作用:
if (ptr && (ptr[0] == '1' || ptr[0] == 't'))
基本上,只要您同时拥有&&
和||
在您的代码中,您需要在其中加一个括号以确保它能够达到您的期望。
您有Null ptr &&取消引用了Null ptr,这会导致段错误。
C使您可以选择让语句像if(ptr == NULL)做某事; 如果在检测到空指针时始终将条件评估为false,则这样的语句将不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.