这段代码是否有助于检查指针或变量是否包含nullptr值?
if(strcmp(variable/pointer, nullptr) == 0){
Do something cool
}
我正在尝试处理一些代码,并且我想知道检查是否存在nullptr值的最佳方法。 感谢。
答案 0 :(得分:1)
我认为你想要的是
if (!pointer || !variable) {
// do something cool
}
!pointer
与pointer == nullptr
基本相同,被一些人认为是更好的风格。见Can I use if (pointer) instead of if (pointer != NULL)?
strcmp
用于C字符串比较。 https://www.tutorialspoint.com/c_standard_library/c_function_strcmp.htm
答案 1 :(得分:1)
您无法使用strcmp
检查变量是否等于nullptr
。来自strcmp
documentation:
<强>参数强>
lhs,rhs - 指向以空值终止的字节串进行比较的指针
strcmp
的输入参数不仅需要指向字节字符串,还必须指向以空字符结尾的字节字符串。
此外,你所做的事情可能比他们需要的更复杂。你可以使用:
if ( variable != nullptr )
{
// Do something
}
else
{
// Do something else
}
答案 2 :(得分:0)
strcmp()
具有未定义的行为。因此,在调用strcmp()
之前必须检查null。
例如,如果两个预期参数都不为空,则仅调用strcmp()
if (first && second && !strcmp(first, second))
{
// first and second are both non-null, and contain matching strings
}
或(更详细地说,C ++ 11及更高版本)
if (first != nullptr && second != nullptr && strcmp(first, second) == 0)
{
// first and second are both non-null, and contain matching strings
}
在C ++中,您最好使用std::string
类型,而不是使用char
数组,字符串终止以及strcmp()
等函数。