Подтвердить что ты не робот

Lvalue, требуемое как левый операнд задания

Почему я получаю

lvalue required as left operand of assignment

с одним сопоставлением строк? Как я могу исправить это в C?

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

Спасибо!

4b9b3361

Ответ 1

Вам нужно сравнить, а не присваивать:

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

Потому что вы хотите проверить, равен ли результат strcmp("hello", "hello") 0.

Об ошибке:

lvalue, требуемое как левый операнд Назначение

lvalue означает присваиваемое значение (переменная), а при назначении левое значение = должно быть lvalue (довольно ясно).

Оба результата функции и константы не могут быть назначены (rvalue s), поэтому они rvalue s. поэтому порядок не имеет значения, и если вы забудете использовать ==, вы получите эту ошибку. (edit:) Я считаю, что хорошая практика по сравнению с константой в левом размере, поэтому, если вы пишете = вместо ==, вы получите ошибку компиляции. например:

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

против.

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

(см. первый ответ на этот вопрос: https://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined)

Ответ 2

Вы не можете назначить rvalue для rvalue.

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

неверно. Предложения:

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

= - оператор присваивать.
== - оператор , равный.
Я знаю, что многие новые программисты смущены этим фактом.

Ответ 3

Измените = на == т.е. if (strcmp("hello", "hello") == 0)

Вы хотите сравнить результат strcmp() с 0. Итак, вам нужно ==. Присвоение его 0 не будет работать, потому что нельзя присвоить значения r.

Ответ 4

Вы пытаетесь присвоить значение функции, что невозможно в C. Попробуйте вместо этого выполнить оператор сравнения:

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

Ответ 5

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

Я пытаюсь назначить 0 для возвращаемого значения функции, которое не является lvalue.

Возвращаемые значения функции не являются lvalue (для него нет хранилища), поэтому любая попытка присвоить значение тому, что не является lvalue, приводит к ошибке.

Лучшая практика, чтобы избежать таких ошибок, если условия должны использовать постоянное значение в левой части сравнения, поэтому, даже если вы используете "=" вместо "==", константа, не являющаяся lvalue, немедленно даст ошибку и избежит случайного присвоения значения и вызывает ложное положительное условие.