lwaarde vereist als linker operand van toewijzing

Waarom krijg ik

lvalue required as left operand of assignment

met een enkele tekenreeksvergelijking? Hoe kan ik dit oplossen in C?

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

Bedankt!


Antwoord 1, autoriteit 100%

Je moet vergelijken, niet toewijzen:

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

Omdat je wilt controleren of het resultaat van strcmp("hello", "hello")gelijk is aan 0.

Over de fout:

lwaarde vereist als linker operand van
opdracht

lvaluebetekent een toewijsbare waarde (variabele), en bij toewijzing moet de linkerwaarde aan de =lvaluezijn (vrij duidelijk) .

Zowel functieresultaten als constanten zijn niet toewijsbaar (rvalues), dus zijn het rvalues. dus de volgorde maakt niet uit en als je vergeet ==te gebruiken, krijg je deze foutmelding. (edit:)Ik beschouw hetals een goede gewoonte om de constante aan de linkerkant te plaatsen, dus als je =schrijft in plaats van ==, krijgt u een compilatiefout. bijvoorbeeld:

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)
{
    //...
}

(zie eerste antwoord op deze vraag: https://stackoverflow.com/questions/2349378 / Nieuw-programmering-jargon-you-bedekking )


Antwoord 2, Autoriteit 17%

U kunt geen RVALUE toewijzen aan een RVALUE.

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

is verkeerd. Suggesties:

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

=is de toewijzen exploitant.
==is de gelijk aan operator.
Ik weet dat veel nieuwe programmeurs in de war zijn met dit feit.


Antwoord 3, Autoriteit 9%

Wijzig =NAAR ==
d.w.z
if (strcmp("hello", "hello") == 0)

U wilt het resultaat van strcmp()NAAR 0 vergelijken, dus u hebt ==nodig. Het toewijzen aan 0 werkt niet omdat RVALUES niet kan worden toegewezen.


Antwoord 4, Autoriteit 7%

U probeert een waarde toe te wijzen aan een functie, die niet mogelijk is in C. Probeer in plaats daarvan de vergelijkingsoperator:

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

Antwoord 5, Autoriteit 2%

Ik vond dat een antwoord op dit probleem bij het omgaan met wiskunde is dat de operator aan de linkerkant de variabele moet zijn die u probeert te veranderen. De logica kan niet eerst komen.

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

Dit is geen direct antwoord op uw vraag, maar het kan nuttig zijn voor toekomstige mensen die hetzelfde googled.


Antwoord 6

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

Probeer 0 toe te wijzen aan functie-retourwaarde die niet lvalu is.

Functieretourwaarden zijn geen lvalue (er is geen opslag voor), dus elke poging om waarde toe te kennen aan iets dat geen lvalue is, resulteert in een fout.

Beste werkwijze om dergelijke fouten te vermijden in if-voorwaarden is het gebruik van een constante waarde aan de linkerkant van de vergelijking, dus zelfs als u “=” gebruikt in plaats van “==”, geeft constant zijn niet lvalue onmiddellijk een fout en vermijdt onbedoelde waardetoewijzing en het veroorzaken van vals-positieve if-conditie.

Other episodes