Почему я получаю
lvalue required as left operand of assignment
с одним сопоставлением строк? Как я могу исправить это в C
?
if (strcmp("hello", "hello") = 0)
Спасибо!
Почему я получаю
lvalue required as left operand of assignment
с одним сопоставлением строк? Как я могу исправить это в C
?
if (strcmp("hello", "hello") = 0)
Спасибо!
Вам нужно сравнить, а не присваивать:
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)
Вы не можете назначить rvalue для rvalue.
if (strcmp("hello", "hello") = 0)
неверно. Предложения:
if (strcmp("hello", "hello") == 0)
^
=
- оператор присваивать. ==
- оператор , равный.
Я знаю, что многие новые программисты смущены этим фактом.
Измените =
на ==
т.е.
if (strcmp("hello", "hello") == 0)
Вы хотите сравнить результат strcmp()
с 0. Итак, вам нужно ==
. Присвоение его 0 не будет работать, потому что нельзя присвоить значения r.
Вы пытаетесь присвоить значение функции, что невозможно в C. Попробуйте вместо этого выполнить оператор сравнения:
if (strcmp("hello", "hello") == 0)
if (strcmp("hello", "hello") = 0)
Я пытаюсь назначить 0 для возвращаемого значения функции, которое не является lvalue.
Возвращаемые значения функции не являются lvalue (для него нет хранилища), поэтому любая попытка присвоить значение тому, что не является lvalue, приводит к ошибке.
Лучшая практика, чтобы избежать таких ошибок, если условия должны использовать постоянное значение в левой части сравнения, поэтому, даже если вы используете "=" вместо "==", константа, не являющаяся lvalue, немедленно даст ошибку и избежит случайного присвоения значения и вызывает ложное положительное условие.