Es necesario comparar, no asigna:
if (strcmp("hello", "hello") == 0)
^
Debido a que desea comprobar si el resultado de strcmp("hello", "hello")
es igual a 0
.
Sobre el error:
lvalue required as left operand of assignment
lvalue
significa un valor asignable (variable), y en la asignación del valor a la izquierda =
tiene que ser lvalue
(muy claro).
Ambos resultados de la función y las constantes no son asignables (rvalue
s), por lo que son rvalue
s. por lo que el orden no importa y si olvida usar ==
obtendrá este error. (editar :) Considero que es una buena práctica en comparación con poner la constante en el tamaño de la izquierda, por lo que si escribe =
en lugar de ==
, obtendrá un error de compilación. por ejemplo:
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)
{
//...
}
(ver primera respuesta a esta pregunta: https://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined)
posible duplicado de [ "lValue requiere como operador de la izquierda de la asignación de" error] (http://stackoverflow.com/questions/3050132/lvalue-required-as-left-operand-of-assignment-error) –