lvalue requirejse en tant qu’opérande gauche de l’affectation

Pourquoi je reçois

lvalue required as left operand of assignment 

avec une seule comparaison de chaîne? Comment puis-je résoudre ce problème en C ?

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

Merci!

Vous devez comparer et non atsortingbuer:

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

Parce que vous voulez vérifier si le résultat de strcmp("hello", "hello") est égal à 0 .

A propos de l’erreur:

lvalue requirejs comme opérande gauche de l’affectation

lvalue signifie une valeur assignable (variable) et, dans l’affectation, la valeur de gauche pour le = doit être lvalue (assez claire).

Les résultats de fonction et les constantes ne sont pas assignables ( rvalue s), ils sont donc rvalue s. donc l’ordre n’a pas d’importance et si vous oubliez d’utiliser == vous obtiendrez cette erreur. (edit 🙂 Je considère comme une bonne pratique en comparaison de mettre la constante dans le côté gauche, donc si vous écrivez = au lieu de == , vous obtiendrez une erreur de compilation. par exemple:

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

contre.

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

(Voir la première réponse à cette question: https://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined )

Vous ne pouvez pas affecter une valeur à une valeur.

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

est faux. Suggestions:

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

= est l’opérateur assigné .
== est l’ égal de l’ opérateur.
Je sais que beaucoup de nouveaux programmeurs sont confus avec ce fait.

Changer = en == c’est-à if (strcmp("hello", "hello") == 0) dire if (strcmp("hello", "hello") == 0)

Vous voulez comparer le résultat de strcmp() à 0. Vous avez donc besoin de == . L’affecter à 0 ne fonctionnera pas car il est impossible d’atsortingbuer des valeurs rvalues.

Vous essayez d’affecter une valeur à une fonction, ce qui n’est pas possible en C. Essayez plutôt l’opérateur de comparaison:

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

J’ai trouvé que la réponse à cette question en mathématiques est que l’opérateur sur le côté gauche doit être la variable que vous essayez de modifier. La logique ne peut pas venir en premier.

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

Ce n’est pas une réponse directe à votre question, mais cela pourrait être utile aux futurs utilisateurs de Google qui font la même chose que moi.

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

Essaie d’atsortingbuer la valeur 0 à la fonction, ce qui n’est pas la valeur lvalue.

Les valeurs de retour de fonction ne sont pas lvalue (pas de stockage), donc toute tentative d’atsortingbution de valeur à quelque chose qui n’est pas lvalue entraîne une erreur.

Il est recommandé d’éviter de telles erreurs si les conditions consistent à utiliser une valeur constante du côté gauche de la comparaison. Ainsi, même si vous utilisez “=” à la place “==”, une constante qui n’est pas lvalue donnera immédiatement une erreur et évitera une atsortingbution de valeur accidentelle et causera une erreur positif si condition.