在本例中为
for(int i = 0; i < 4; i++) {
char c = 's';
printf("%dn", strcmp(&c, "s"));
}
输出:0,1,2,3
为什么函数strcmp((在for(({}中的返回值不同并且不断增加?
代码片段具有未定义的行为,因为函数strcmp
是为比较字符串而设计的。但是该语句中的指针表达式&c
printf("%dn", strcmp(&c, "s"));
不指向字符串。它指向char类型的单个对象,在该对象之后,内存可以包含任何内容。
因此,在上面的语句之后的for循环的每次迭代中,对象c
之后的内存似乎都被覆盖了。
相反,你应该写
const char *c = "s";
printf("%dn", strcmp(c, "s"));