質問

文字配列があり、文字列リテラルと一致するかどうかを確認しようとしています。例:

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

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

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

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

役に立ちましたか?

解決

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

他のヒント

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

ETA:==は一般に機能しません。これは、cstr1 == cstr2ポインターを比較するため、cstr1cstr2が同じメモリー位置を指す場合にのみ比較が真になるためです。たとえ両方が辞書式に等しい文字列を参照する場合でも。あなたが試したもの(cstringをリテラルと比較する、例えばcstr == "yes"特には動作しません、なぜなら規格はそれを必要としないからです。合理的な実装では、爆発することは疑いますが、cstrは文字列定数"yes"が存在するアドレスを参照する可能性が低いため、<=>は成功しそうにありません。

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

  • 値<!> lt; <!> ltの場合は0。 b
  • a == bの場合0
  • 値<!> gt; <!> gt;の場合は0 b
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top