左值作为赋值的左操作数
我为什么要来
lvalue required as left operand of assignment
用单个字符串比较? 我怎样才能在C
解决这个问题?
if (strcmp("hello", "hello") = 0)
谢谢!
你需要比较,而不是分配:
if (strcmp("hello", "hello") == 0) ^
因为你想检查strcmp("hello", "hello")
等于0
。
关于错误:
左值作为赋值的左操作数
lvalue
表示可赋值(变量),在赋值时, =
的左值必须是lvalue
(非常清晰)。
函数结果和常量都不可赋值( rvalue
s),因此它们是rvalue
s。 因此顺序无关紧要,如果您忘记使用==
您将收到此错误。 (编辑:) 我认为将常量放在左侧是一个很好的做法,所以如果你写=
而不是==
,你将得到一个编译错误。 例如:
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 )
您不能将右值分配给右值。
if (strcmp("hello", "hello") = 0)
是错的。 建议:
if (strcmp("hello", "hello") == 0) ^
=
是赋值运算符。
==
是等于运营商。
我知道很多新程序员都对这个事实感到困惑。
Change =
to ==
ie if (strcmp("hello", "hello") == 0)
你想比较strcmp()
的结果为0.所以你需要==
。 将其分配为0将不起作用,因为无法分配rvalues。
您正在尝试为函数赋值,这在C中是不可能的。请尝试使用比较运算符:
if (strcmp("hello", "hello") == 0)
我发现在处理数学时这个问题的答案是左侧的操作符必须是您要更改的变量。 逻辑不能先行。
coin1 + coin2 + coin3 = coinTotal; // Wrong coinTotal = coin1 + coin2 + coin3; // Right
这不是你的问题的直接答案,但它可能有助于未来的人google我搜索相同的东西。
if (strcmp("hello", "hello") = 0)
试图将0分配给不是左值的函数返回值。
函数返回值不是左值(没有存储空间),因此任何尝试将值赋给非左值的东西都会导致错误。
最好的做法是避免这种错误,如果条件是在比较的左侧使用常量值,那么即使你使用“=”而不是“==”,常量不是左值会立即给出错误并避免意外的值赋值并导致错误如果条件肯定。