24

为什么我越来越

lvalue required as left operand of assignment

与单个字符串比较?我该如何解决这个问题C

if (strcmp("hello", "hello") = 0)

谢谢!

4

6 回答 6

46

您需要比较,而不是分配:

if (strcmp("hello", "hello") == 0)
                             ^

因为你想检查结果是否strcmp("hello", "hello")等于0

关于错误:

左值需要作为赋值的左操作数

lvalue表示可分配的值(变量),并且在分配左值时=必须是lvalue(很清楚)。

函数结果和常量都不能赋值 ( rvalues),所以它们是rvalues。所以顺序无关紧要,如果您忘记使用==,您将收到此错误。(编辑:)与将常量放在左侧相比,我认为这=是一个很好的做法,所以如果你写而不是==,你会得到一个编译错误。例如:

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 )

于 2011-05-28T15:08:06.717 回答
8

您不能将右值分配给右值。

if (strcmp("hello", "hello") = 0)

是错的。建议:

if (strcmp("hello", "hello") == 0)
                              ^

=赋值运算符。
==等于运算符。
我知道许多新程序员对这个事实感到困惑。

于 2015-09-06T12:48:48.683 回答
4

改成 ie =_==if (strcmp("hello", "hello") == 0)

您想将 的结果strcmp()与 0 进行比较。所以您需要==. 将其分配给 0 将不起作用,因为无法分配右值。

于 2011-05-28T15:08:39.740 回答
3

您正在尝试为函数赋值,这在 C 中是不可能的。请尝试使用比较运算符:

if (strcmp("hello", "hello") == 0)
于 2011-05-28T15:08:54.597 回答
1

我发现在处理数学时对这个问题的回答是左侧的运算符必须是您要更改的变量。逻辑不能放在第一位。

coin1 + coin2 + coin3 = coinTotal; // Wrong

coinTotal = coin1 + coin2 + coin3; // Right

这不是对您问题的直接答案,但它可能对未来使用我搜索过的相同内容的人有所帮助。

于 2018-02-06T23:19:31.333 回答
0
if (strcmp("hello", "hello") = 0)

试图将 0 分配给不是左值的函数返回值。

函数返回值不是左值(没有存储空间),因此任何将值分配给非左值的尝试都会导致错误。

在 if 条件中避免此类错误的最佳做法是在比较左侧使用常量值,因此即使您使用“=”而不是“==”,常量不是左值也会立即出错并避免意外赋值并导致错误如果条件为正。

于 2017-12-17T18:52:00.913 回答