codigo c lvalue strcmp

codigo - strcpy c



lvalue requerido como operando izquierdo de asignaciĆ³n (6)

Porque estoy recibiendo

lvalue required as left operand of assignment

con una sola cadena de comparación? ¿Cómo puedo solucionar esto en C ?

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

¡Gracias!


Cambiar = a == es decir, if (strcmp("hello", "hello") == 0)

Desea comparar el resultado de strcmp() con 0. Entonces necesita == . Asignarlo a 0 no funcionará porque no se pueden asignar rvalues.


Encontré que una respuesta a este problema cuando se trata de matemáticas es que el operador en el lado izquierdo debe ser la variable que está tratando de cambiar. La lógica no puede venir primero.

coin1 + coin2 + coin3 = coinTotal; // Wrong coinTotal = coin1 + coin2 + coin3; // Right

Esta no es una respuesta directa a su pregunta, pero podría ser útil para las personas futuras que buscan en Google la misma cosa que he buscado en Google.


Está intentando asignar un valor a una función, lo que no es posible en C. En su lugar, intente con el operador de comparación:

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


Necesitas comparar, no asignar:

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

Porque desea comprobar si el resultado de strcmp("hello", "hello") es igual a 0 .

Sobre el error:

lvalue requerido como operando izquierdo de asignación

lvalue significa un valor asignable (variable), y en la asignación el valor izquierdo a = tiene que ser lvalue (bastante claro).

Tanto los resultados de la función como las constantes no son asignables ( rvalue s), por lo que son rvalue s. así que el orden no importa y si olvida usar == obtendrá este error. (edit :) Lo considero una buena práctica en comparación con poner la constante en el lado izquierdo, por lo que si escribe = lugar de == , obtendrá un error de compilación. por ejemplo:

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

contra

int a = 5; if (0 = a) // Generates compilation error, you cannot assign a to 0 (rvalue) { //... }

(vea la primera respuesta a esta pregunta: https://.com/questions/2349378/new-programming-jargon-you-coined )


No se puede asignar un valor a un valor.

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

Está Mal. Sugerencias:

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

= es el operador asignado .
== es igual al operador.
Sé que muchos programadores nuevos están confundidos con este hecho.


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

Está intentando asignar 0 al valor de retorno de la función que no es lvalue.

Los valores de retorno de la función no son lvalue (no hay almacenamiento para ellos), por lo que cualquier intento de asignar un valor a algo que no sea lvalue genera un error.

La mejor práctica para evitar este tipo de errores si las condiciones es usar un valor constante en el lado izquierdo de la comparación, por lo tanto, incluso si usa "=" en lugar de "==", la constante que no sea lvalue dará inmediatamente un error y evitará la asignación accidental de valores y causará falsas positivo si condición.