C++ 比较const char*和strcmp

C++ 比较const char*和strcmp,c++,char,constants,strcmp,C++,Char,Constants,Strcmp,我将常量char*与字符串进行比较,由于某种原因,它总是成功的 if (std::strcmp(t->detectColor->name, "ghghjg") != 0) { printf("XXXXXXXXXXX\n"); // check if it was allready a sequencer if (std::strcmp(t->className, "IM_SURE_IT_CANT_BE_THIS") !=

我将
常量char*
与字符串进行比较,由于某种原因,它总是成功的

    if (std::strcmp(t->detectColor->name, "ghghjg") != 0) {
        printf("XXXXXXXXXXX\n");
        // check if it was allready a sequencer
        if (std::strcmp(t->className, "IM_SURE_IT_CANT_BE_THIS") != 0) {
          printf("what is going on?\n");
detectColor名称总是类似于绿色或蓝色,例如,
t->className
是“OfxdTangableBase”。它还在打印吗

XXXXXXXXXXX
what is going on?
在控制台中。 如何获得有效的比较?

根据:

返回一个整数值,该值指示 字符串:零值表示两个字符串相等。价值 大于零表示第一个不包含的字符 match在str1中的值大于在str2中的值;和一个小于 零表示相反

或者换个说法:

返回值

  • 如果lhs小于rhs,则为负值
  • 0​ 如果lhs等于rhs
  • 如果lhs大于rhs,则为正值
因此,在您的代码中,
strcmp(t->detectColor->name,“ghghjg”)
将返回与0不同的内容。因此,将打印“XXXXXXXXXX”

您只需更改:

if (std::strcmp(t->detectColor->name, "ghghjg") != 0)


其他比较也一样。

std::strcmp
在字符串相同时返回0,在字符串不同时返回小于0或大于0的值。因此,您可以将代码更改为以下内容:

if (std::strcmp(t->className, "IM_SURE_IT_CANT_BE_THIS") != 0) {
  printf("indeed, strings are different\n");
如果lhs小于rhs,则为负值。 ​0​ 如果lhs等于rhs。 如果lhs大于rhs,则为正值


如何获得有效的比较?

if (std::strcmp(t->className, "IM_SURE_IT_CANT_BE_THIS") == 0) {
      printf("strings are equal lexicographically\n");

使用更好的参考citations@piotruś:你是说这篇引文是错误的吗?在我看来,这很好,不过也许引用C标准比引用某个网站更好。@piotruś我已经添加了您的参考资料。我之所以使用cplusplus.com,是因为它们通常是谷歌上的第一个结果,并且能够完成这项工作。我只是想给出一个建议,cppreference是更好的来源,在这种情况下,当然是引用correct@clankill3r:在C++中,您将使用<代码> STD::String >并与=进行比较。这很复杂,因为你使用C库是有原因的。你睡得好吗?来自这篇文章:这是一个很容易犯的错误。
if (std::strcmp(t->className, "IM_SURE_IT_CANT_BE_THIS") == 0) {
      printf("strings are equal lexicographically\n");