Почему я получаю
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, немедленно даст ошибку и избежит случайного присвоения значения и вызывает ложное положительное условие.