检查 char* 是否为 null 或空时取消引用 NULL 指针警告
Dereferencing NULL pointer warning when checking if char* is null or empty
简单地说,我正在通过 if
语句检查两个 char* 是否为 nullptr 或为空,但我收到一条警告,说我正在取消引用空指针。
// mplate is a reference to a class
if ((mplate.m_plate != nullptr || mplate.m_plate[0] != '[=10=]') || (plate != nullptr || plate[0] != '[=10=]')) {
// 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 或指向 '[=12=]'
时执行 if
块,所以你真的想要这个:
// mplate is a reference to a class
if (mplate.m_plate == nullptr || mplate.m_plate[0] == '[=10=]' || plate == nullptr || plate[0] == '[=10=]') {
// Do something (Block entered on the FIRST true test...)
}
else {
// do something else ( Block entered ONLY if all four tests are false...)
}
在此代码中,if
语句中的测试将 'short-circuit' 只要其中任何一个测试是 true
,因此您永远不会取消引用 nullptr
.
简单地说,我正在通过 if
语句检查两个 char* 是否为 nullptr 或为空,但我收到一条警告,说我正在取消引用空指针。
// mplate is a reference to a class
if ((mplate.m_plate != nullptr || mplate.m_plate[0] != '[=10=]') || (plate != nullptr || plate[0] != '[=10=]')) {
// 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 或指向 '[=12=]'
时执行 if
块,所以你真的想要这个:
// mplate is a reference to a class
if (mplate.m_plate == nullptr || mplate.m_plate[0] == '[=10=]' || plate == nullptr || plate[0] == '[=10=]') {
// Do something (Block entered on the FIRST true test...)
}
else {
// do something else ( Block entered ONLY if all four tests are false...)
}
在此代码中,if
语句中的测试将 'short-circuit' 只要其中任何一个测试是 true
,因此您永远不会取消引用 nullptr
.