lvalue required as left operand of assignment

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP



lvalue required as left operand of assignment



Why am I getting


lvalue required as left operand of assignment



with a single string comparison? How can I fix this in C?


C


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



Thanks!





possible duplicate of "lvalue required as left operand of assignment " error
– Bo Persson
May 28 '11 at 15:22




6 Answers
6



You need to compare, not assign:


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



Because you want to check if the result of strcmp("hello", "hello") equals to 0.


strcmp("hello", "hello")


0



About the error:



lvalue required as left operand of
assignment



lvalue means an assignable value (variable), and in assignment the left value to the = has to be lvalue (pretty clear).


lvalue


=


lvalue



Both function results and constants are not assignable (rvalues), so they are rvalues. so the order doesn't matter and if you forget to use == you will get this error. (edit:)I consider it a good practice in comparison to put the constant in the left side, so if you write = instead of ==, you will get a compilation error. for example:


rvalue


rvalue


==


=


==


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)

//...



(see first answer to this question: https://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined)





Writing backwards comparisons is not "a good practice", it's an abomination. Simply turn on your compiler warnings if you need protection against accidental use of = in place of ==. In any case this is like riding a bike with training wheels or bowling with bumpers. No one but beginners should need it.
– R..
May 28 '11 at 16:05



=


==





@R. I disagree, there are typos that could be avoided in this way. And there are (many) times where the use of = in the expression is legitimate.
– MByD
May 28 '11 at 16:14


=





I agree there are times it's legitimate. That's why I suggested enabling the warning and using extra parentheses when you really mean it.
– R..
May 28 '11 at 16:22



You cannot assign an rvalue to an rvalue.


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



is wrong. Suggestions:


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



= is the assign operator.
== is the equal to operator.

I know many new programmers are confused with this fact.


=


==



Change = to ==
i.e
if (strcmp("hello", "hello") == 0)


=


==


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



You want to compare the result of strcmp() to 0. So you need ==. Assigning it to 0 won't work because rvalues cannot be assigned to.


strcmp()


==



You are trying to assign a value to a function, which is not possible in C. Try the comparison operator instead:


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



I found that an answer to this issue when dealing with math is that the operator on the left hand side must be the variable you are trying to change. The logic cannot come first.


coin1 + coin2 + coin3 = coinTotal; // Wrong

coinTotal = coin1 + coin2 + coin3; // Right



This isn't a direct answer to your question but it might be helpful to future people who google the same thing I googled.


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



Is trying to assign 0 to function return value which isn't lvalue.



Function return values are not lvalue (no storage for it), so any attempt to assign value to something that is not lvalue result in error.



Best practice to avoid such mistakes in if conditions is to use constant value on left side of comparison, so even if you use "=" instead "==", constant being not lvalue will immediately give error and avoid accidental value assignment and causing false positive if condition.




Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).



Would you like to answer one of these unanswered questions instead?

Popular posts from this blog

Firebase Auth - with Email and Password - Check user already registered

Dynamically update html content plain JS

How to determine optimal route across keyboard