将const char *与strcmp进行比较

时间:2013-11-14 13:17:42

标签: c++ char const strcmp

我将const 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是“ofxDTangibleBase”。还是打印

XXXXXXXXXXX
what is going on?

在控制台中。 我怎样才能获得有效的比较?

2 个答案:

答案 0 :(得分:8)

根据cplusplus.com

  

返回一个表示其间关系的整数值   strings:零值表示两个字符串相等。一个值   大于零表示第一个字符没有   match在str1中的值大于在str2中的值;并且值小于   零表示相反。

或者以cppreference.com

表示不同
  

返回值

     
      
  • 如果lhs小于rhs,则为负值。
  •   
  • 0如果lhs等于rhs。
  •   
  • 如果lhs大于rhs,则为正值。
  •   

因此,在您的代码中,strcmp(t->detectColor->name, "ghghjg")将返回不同于0的内容。因此,将打印“XXXXXXXXXXX”。

您只需要更改:

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

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

其他比较也一样。

答案 1 :(得分:1)

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,则为负值。   如果lhs等于rhs,则为0。   如果lhs大于rhs,则为正值。

http://en.cppreference.com/w/cpp/string/byte/strcmp


如何才能获得有效的比较?

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