简单地说,我正在通过if
语句检查两个char *是否为nullptr或为空,但收到警告,提示我正在取消引用空指针。
// mplate is a reference to a class
if ((mplate.m_plate != nullptr || mplate.m_plate[0] != '\0') || (plate != nullptr || plate[0] != '\0')) {
// Do something
}
else {
// do something else
}
所以基本上我想在if
语句中说的是mplate.mplate
或plate
是否为空,或者nullptr
这样做是其他方式。
Severity Code Description Project File Line Suppression State
Warning C6011 Dereferencing NULL pointer 'make'.
Warning C6011 Dereferencing NULL pointer 'model'.
Warning C6011 Dereferencing NULL pointer 'mplate.m_plate'.
Warning C6011 Dereferencing NULL pointer 'plate'.
Warning C6011 Dereferencing NULL pointer 'plate'.
您正在做类似的事情
if (p != nullptr || *p)
即您要取消引用仅当时指针为nullptr
。这意味着如果指针有效,则不执行任何操作;如果指针无效(即UB),则取消引用。
您需要像这样执行逻辑and
if (p != nullptr && *p)
即仅在指针为not nullptr
时取消引用。
您的问题指出,如果任一指针为NULL或指向if
,则要执行'\0'
块,因此,您确实希望这样做: