你能用strcmp()检查nullptr值吗?

时间:2017-06-10 05:38:35

标签: c++ oop

这段代码是否有助于检查指针或变量是否包含nullptr值?

if(strcmp(variable/pointer, nullptr) == 0){
    Do something cool
}

我正在尝试处理一些代码,并且我想知道检查是否存在nullptr值的最佳方法。 感谢。

3 个答案:

答案 0 :(得分:1)

我认为你想要的是

if (!pointer || !variable) { 
    // do something cool
}

!pointerpointer == 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()等函数。