我为什么要来
lvalue required as left operand of assignment
Run Code Online (Sandbox Code Playgroud)
用单个字符串比较?我该如何解决这个问题C?
if (strcmp("hello", "hello") = 0)
Run Code Online (Sandbox Code Playgroud)
谢谢!
MBy*_*ByD 43
你需要比较,而不是分配:
if (strcmp("hello", "hello") == 0)
^
Run Code Online (Sandbox Code Playgroud)
因为你想检查结果是否strcmp("hello", "hello")等于0.
关于错误:
左值作为赋值的左操作数
lvalue表示可赋值(变量),在赋值时,左值=必须是lvalue(非常清楚).
函数结果和常量都不可分配rvalue,因此它们是rvalues.因此订单无关紧要,如果您忘记使用,==您将收到此错误.(编辑:) 我认为将常量放在左侧是一个很好的做法,所以如果你写=而不是==,你将得到一个编译错误.例如:
int a = 5;
if (a = 0) // Always evaluated as false, no error.
{
//...
}
Run Code Online (Sandbox Code Playgroud)
与
int a = 5;
if (0 = a) // Generates compilation error, you cannot assign a to 0 (rvalue)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
(参见这个问题的第一个答案:https://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined)
您无法为右值分配右值.
if (strcmp("hello", "hello") = 0)
Run Code Online (Sandbox Code Playgroud)
是错的.建议:
if (strcmp("hello", "hello") == 0)
^
Run Code Online (Sandbox Code Playgroud)
=是赋值运算符.
==是等于运营商.
我知道很多新程序员都对这个事实感到困惑.