检查char *是否为空或为空时取消引用NULL指针警告

问题描述 投票:0回答:2

简单地说,我正在通过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.mplateplate是否为空,或者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'.
c++ pointers dereference
2个回答
5
投票

您正在做类似的事情

if (p != nullptr || *p)

即您要取消引用仅当时指针为nullptr。这意味着如果指针有效,则不执行任何操作;如果指针无效(即UB),则取消引用。

您需要像这样执行逻辑and

if (p != nullptr && *p)

即仅在指针为not nullptr时取消引用。


1
投票

您的问题指出,如果任一指​​针为NULL或指向if,则要执行'\0'块,因此,您确实希望这样做:

© www.soinside.com 2019 - 2024. All rights reserved.