一般来说,我知道你为什么会遇到这个错误,但在这个特殊情况下我有点困惑......
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* mystrncpy(char* dst, const char* src, size_t n) {
char* temp = dst;
while (n-- > 0 && (*temp = *src)) {
temp++;
src++;
}
return dst;
}
int main() {
const char* str = "Hello World!";
char buf[50];
memset(buf, 0, sizeof(buf));
mystrncpy(buf, str, sizeof(buf));
printf("%s\n", buf);
}
上面的代码效果很好,但如果我删除额外的括号集,将while循环更改为:
while (n-- > 0 && *temp = *src)
然后我收到错误。我想这是关于运算符优先级的事情,但我有点困惑。有人可以解释while循环更改会导致出现此编译器错误吗?
答案 0 :(得分:5)
是的,这是优先权。
=
的优先级低于&&
。因此,后一种情况解析为:
while ((n-- > 0 && *temp) = *src)
当然(n-- > 0 && *temp)
不是l值。
您确定不打算使用 ==
代替=
吗?
答案 1 :(得分:4)
n-- > 0 && *temp = *src
= / \ && *src / \ > *temp / \ n-- 0
答案 2 :(得分:2)
答案 3 :(得分:0)
Operator precedence。和&amp;&amp;运算符在13位,= 16。
答案 4 :(得分:0)
赋值运算符的优先级非常低,所以就像你试图分配n-- > 0 && *temp
的结果一样,这显然不是左值。