なぜ私は
lvalue required as left operand of assignment
単一の文字列比較で? C
でこれを修正するにはどうすればよいですか?
if (strcmp("hello", "hello") = 0)
ありがとう!
以下を割り当てずに比較する必要があります。
if (strcmp("hello", "hello") == 0)
^
strcmp("hello", "hello")
の結果が0
と等しいかどうかを確認するためです。
エラーについて:
代入の左オペランドとして左辺値が必要です
lvalue
は割り当て可能な値(変数)を意味し、割り当てでは=
への左の値はlvalue
(かなり明確)でなければなりません。
関数の結果と定数はどちらも割り当て可能ではない(rvalue
s)ので、rvalue
sです。そのため、順序は関係なく、==
の使用を忘れると、このエラーが発生します。 (編集:)私はそれを考慮します左側に定数を置くことと比較して良い習慣なので、=
の代わりに==
を書くと、あなたはコンパイルエラーが発生します。例えば:
int a = 5;
if (a = 0) // Always evaluated as false, no error.
{
//...
}
vs.
int a = 5;
if (0 = a) // Generates compilation error, you cannot assign a to 0 (rvalue)
{
//...
}
(この質問に対する最初の回答を参照してください: https://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined )
右辺値に右辺値を割り当てることはできません。
if (strcmp("hello", "hello") = 0)
間違っている。提案:
if (strcmp("hello", "hello") == 0)
^
=
はassign演算子です。==
は等しい演算子です。
多くの新しいプログラマーがこの事実と混同していることを知っています。
_=
_を_==
_に変更します。つまり、if (strcmp("hello", "hello") == 0)
strcmp()
の結果を0と比較したいので、_==
_が必要です。右辺値を割り当てることができないため、0に割り当てても機能しません。
関数に値を割り当てようとしていますが、これはCでは不可能です。代わりに比較演算子を試してください。
if (strcmp("hello", "hello") == 0)
数学を扱うときのこの問題への答えは、左側の演算子は変更しようとしている変数でなければならないということです。ロジックが最初に来ることはできません。
coin1 + coin2 + coin3 = coinTotal; // Wrong
coinTotal = coin1 + coin2 + coin3; // Right
これはあなたの質問に対する直接的な答えではありませんが、私がグーグルで検索したものと同じものをグーグルで検索する将来の人々に役立つかもしれません。
if (strcmp("hello", "hello") = 0)
左辺値ではない関数の戻り値に0を割り当てようとしています。
関数の戻り値は左辺値ではない(そのためのストレージがない)ため、左辺値ではないものに値を割り当てようとするとエラーになります。
条件が比較の左側で定数値を使用する場合にこのような間違いを避けるためのベストプラクティスです。したがって、「==」の代わりに「=」を使用しても、lvalueではない定数はすぐにエラーになり、誤って値が割り当てられてfalseが発生するのを防ぎます条件が正の場合。