C ++での文字配列と文字列リテラルの比較
-
08-07-2019 - |
質問
文字配列があり、文字列リテラルと一致するかどうかを確認しようとしています。例:
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
がポインターを比較するため、cstr1
とcstr2
が同じメモリー位置を指す場合にのみ比較が真になるためです。たとえ両方が辞書式に等しい文字列を参照する場合でも。あなたが試したもの(cstringをリテラルと比較する、例えばcstr == "yes"
)特には動作しません、なぜなら規格はそれを必要としないからです。合理的な実装では、爆発することは疑いますが、cstr
は文字列定数"yes"
が存在するアドレスを参照する可能性が低いため、<=>は成功しそうにありません。
strcmpは、2つの文字列の相対的な順序を示すトライステート値を返します。 strcmp(a、b)のような呼び出しを行うと、関数は戻ります
- 値<!> lt; <!> ltの場合は0。 b
- a == bの場合0
- 値<!> gt; <!> gt;の場合は0 b
所属していません StackOverflow