Вам нужно сравнивать, а не присваивать:
if (strcmp("hello", "hello") == 0)
^
Поскольку вы хотите проверить, равен ли результат strcmp("hello", "hello")
0
.
Об ошибке:
lvalue требуется как левый операнд
Назначение
lvalue
означает присваиваемое значение (переменную), и при присвоении левое значение для =
должно быть lvalue
(довольно ясно).
Результаты функций и константы не могут быть назначены (rvalue
с), поэтому они равны rvalue
с. поэтому порядок не имеет значения, и если вы забудете использовать ==
, вы получите эту ошибку. (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)