左值作为赋值的左操作数

Jos*_*eph 23 c strcmp lvalue

我为什么要来

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)

  • 写倒退比较不是"一个好习惯",这是令人厌恶的.如果您需要防止意外使用`=`代替`==`,请打开编译器警告.无论如何,这就像骑自行车带有训练轮或保险杠保龄球.没有人,但初学者应该需要它. (5认同)

EKo*_*ons 7

您无法为右值分配右值.

if (strcmp("hello", "hello") = 0)
Run Code Online (Sandbox Code Playgroud)

是错的.建议:

if (strcmp("hello", "hello") == 0)
                              ^
Run Code Online (Sandbox Code Playgroud)

=赋值运算符.
==等于运营商.
我知道很多新程序员都对这个事实感到困惑.