我有一个字符数组,我试图弄清楚它是否与字符串文字匹配,例如:

char value[] = "yes";
if(value == "yes") {
   // code block
} else {
   // code block
}

这导致了以下错误:与字符串文字比较会导致未指定的行为。我也尝试过类似的事情:

char value[] = "yes";
if(strcmp(value, "yes")) {
   // code block
} else {
   // code block
}

这不会产生任何编译器错误,但它的行为不符合预期。

有帮助吗?

解决方案

如果字符串相等,则 std::strcmp 返回0。

其他提示

检查strcmp的文档。提示:它不返回布尔值。

ETA:==一般不起作用,因为cstr1 == cstr2比较指针,因此只有当cstr1cstr2指向相同的内存位置时,才会进行比较,即使它们碰巧都是指字典上相等的字符串。您尝试的内容(将cstring与文字进行比较,例如cstr == "yes"尤其是将无法正常工作,因为标准并不要求它。在一个合理的实现中,我怀疑它会爆炸,但cstr不太可能成功,因为"yes"不太可能引用字符串常量<=>所在的地址。

strcmp 返回一个三态值来指示两个字符串的相对顺序。当进行像 strcmp(a, b) 这样的调用时,该函数返回

  • 当 a < b 时,a 值 < 0
  • 0 当 a == b 时
  • 当 a > b 时 a 值 > 0
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top