8

文字配列があり、それが文字列リテラルと一致するかどうかを調べようとしています。次に例を示します。

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

これにより、次のエラーが発生しました: 文字列リテラルとの比較により、未指定の動作が発生します。私も次のようなことを試しました:

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

これによりコンパイラ エラーは発生しませんでしたが、期待どおりに動作していません。

4

4 に答える 4

27

strcmp のドキュメントを確認してください。ヒント: ブール値を返しません。

ETA:はポインタを比較するため==、一般的には機能しません。そのため、 と が同じメモリ位置を指している場合にのみ比較が真になります。あなたが試したこと(cstringをリテラルと比較するなど)は、標準では要求されていないため、特に機能しません。合理的な実装では、爆発することはないと思いますが、文字列定数が存在するアドレスを参照する可能性は低いため、成功する可能性は低いです.cstr1 == cstr2cstr1cstr2cstr == "yes"cstr == "yes"cstr"yes"

于 2009-10-28T19:09:51.350 に答える
22

std::strcmp文字列が等しい場合は 0 を返します。

于 2009-10-28T19:09:30.387 に答える
3

strcmp は、2 つの文字列の相対的な順序を示すトライステート値を返します。strcmp(a, b) のような呼び出しを行うと、関数は戻ります

  • a < b の場合、a 値 < 0
  • a == b の場合は 0
  • a > b の場合、a 値 > 0
于 2009-10-28T19:16:38.527 に答える