表达式必须是C中的可修改值

时间:2019-02-07 13:12:19

标签: c

void lowerit(char line[])
{
    int i;
    for (i = 0; line[i] != '\0'; ++i)
    {
        (line[i] >= 'A' && line[i] <= 'Z') ? line[i] = line[i] - 'A' + 'a' : line[i] = line[i];
    }
}

很简单的代码.. 由于某种原因,我在for循环的内部Visual Studio中出现错误。 (Line [i] <---这会导致“表达式必须是可修改的值”错误。 我在做什么错了?

1 个答案:

答案 0 :(得分:8)

您需要将三元条件写为

DATE

尽管由于line[i] = line[i] >= 'A' && line[i] <= 'Z' ? line[i] - 'A' + 'a' : line[i]; 分支是无操作的,所以首选简单的:

由于if和三进制条件具有相同的优先级和关联性(尽管在中间部分被视为括号的情况下,后者可以被虚构地提升),因此您所拥有的表达式未分组您期望的方式,这解释了编译器诊断。实际上,它被分组为

=

有趣的是,它是有效的C ++,但不是有效的C。

最后,您编写的表达式看起来像是标准库函数((line[i] >= 'A' && line[i] <= 'Z') ? line[i] = line[i] - 'A' + 'a' : line[i]) = line[i]; 的不可移植版本,您应该改用它。