0
while((count++<n) && *s1++=*s2++);
  *s1='\0';

我运行了这段代码并得到了一个错误lvalue required as left operand of assignment in c

我能够纠正它

while((count++<n) && (*s1++=*s2++));
  *s1='\0';

这很好,但我不知道为什么。我在堆栈溢出中读到其他线程说左值应该是一个可分配的值而不应该是一个常量。我无法关联它。是因为(expression)有价值而没有价值expression吗?我试着用

int c=3;
  int b=2;
 // printf("%d\n",c==b);
  printf("%d\n",(c=b));

两者都给出了相同的结果 2。

4

1 回答 1

3

第一段代码无法编译的原因是&&运算符在 C 中的优先级高于=.

所以编译器将其读作((count++<n) && *s1++) = *s2++,或更一般地说(A && B) = C

于 2013-11-03T05:52:21.733 回答