3

我将 aconst 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?

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

4

2 回答 2

9

根据cplusplus.com

返回一个整数值,表示字符串之间的关系:零值表示两个字符串相等。大于零的值表示第一个不匹配的字符在 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)

其他比较也是如此。

于 2013-11-14T13:19:35.203 回答
2

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,则为正值。

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");
于 2013-11-14T13:23:49.570 回答