3

a を文字列と比較する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?

コンソールで。どうすれば有効な比較を取得できますか?

4

2 に答える 2

9

cplusplus.comによると:

文字列間の関係を示す整数値を返します。ゼロ値は、両方の文字列が等しいことを示します。ゼロより大きい値は、一致しない最初の文字の値が str2 よりも str1 の方が大きいことを示します。ゼロ未満の値はその反対を示しま​​す。

またはcppreference.comによって別の言い方をされます:

戻り値

  • lhs が rhs より小さい場合は負の値。
  • lhs が rhs と等しい場合は 0。
  • 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 に答える