24

なぜ私は得ているのですか

lvalue required as left operand of assignment

単一の文字列比較で?でこれを修正するにはどうすればよいCですか?

if (strcmp("hello", "hello") = 0)

ありがとう!

4

6 に答える 6

46

割り当てるのではなく、比較する必要があります。

if (strcmp("hello", "hello") == 0)
                             ^

strcmp("hello", "hello")の結果が と等しいかどうかを確認したいからです0

エラーについて:

代入の左オペランドとして必要な左辺値

lvalueは代入可能な値 (変数) を意味し、代入では の左の値は(かなり明確)=でなければなりません。lvalue

関数の結果と定数はどちらも代入可能 ( rvalue) ではないため、rvalueです。したがって、順序は関係ありません。使用するのを忘れると==、このエラーが発生します。(編集:)定数を左側に置くのと比較して良い習慣だと思うので、の代わりに書く=コンパイル==エラーが発生します。例えば:

int a = 5;
if (a = 0) // Always evaluated as false, no error.
{
    //...
}

対。

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 )

于 2011-05-28T15:08:06.717 に答える
8

右辺値に右辺値を割り当てることはできません。

if (strcmp("hello", "hello") = 0)

間違っている。提案:

if (strcmp("hello", "hello") == 0)
                              ^

=代入演算子です。
==等しい演算子です
多くの新しいプログラマーがこの事実に混乱していることを私は知っています。

于 2015-09-06T12:48:48.683 に答える
4

すなわち =に変更==if (strcmp("hello", "hello") == 0)

の結果を 0 と比較したいstrcmp()ので、 が必要==です。右辺値を割り当てることができないため、0 に割り当てても機能しません。

于 2011-05-28T15:08:39.740 に答える
3

関数に値を割り当てようとしていますが、これは C では不可能です。代わりに比較演算子を試してください。

if (strcmp("hello", "hello") == 0)
于 2011-05-28T15:08:54.597 に答える
1

数学を扱うときのこの問題への答えは、左側の演算子が変更しようとしている変数でなければならないということです。ロジックを優先することはできません。

coin1 + coin2 + coin3 = coinTotal; // Wrong

coinTotal = coin1 + coin2 + coin3; // Right

これはあなたの質問に対する直接的な回答ではありませんが、私がググったのと同じことをググる将来の人々に役立つかもしれません.

于 2018-02-06T23:19:31.333 に答える