为什么我会收到
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
),因此它们是rvalue
。所以顺序无关紧要,如果你忘记使用==
,就会出现这个错误。(编辑:)我认为与将常量放在左侧进行比较相比,这种做法很好,因此如果你写 =
而不是==
,就会得到一个编译错误。例如:
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)
=
是合法的。 - MByDif (strcmp("hello", "hello") = 0)
出错了。建议如下:
if (strcmp("hello", "hello") == 0)
^
=
是赋值运算符。
==
是等于运算符。
我知道许多新手程序员对此感到困惑。
将=
改为==
if (strcmp("hello", "hello") == 0)
你想要比较strcmp()
的结果是否等于0。所以你需要用==
。将其赋值为0是不起作用的,因为rvalues不能被赋值。
if (strcmp("hello", "hello") == 0)
coin1 + coin2 + coin3 = coinTotal; // Wrong
coinTotal = coin1 + coin2 + coin3; // Right
data_ptr[data_len-1-i] = buffer[i];
- Eduardo Reisif (strcmp("hello", "hello") = 0)
试图将0分配给不是左值的函数返回值。
函数返回值不是左值(没有存储空间),因此任何尝试将值分配给不是左值的东西都会导致错误。
在if条件中避免这种错误的最佳实践是在比较的左侧使用常量值,因此即使您使用“=”而不是“==”,常量不是左值也会立即给出错误并避免意外值分配并导致虚假的正面if条件。