为什么函数strcmp()在for(){}中的返回值不同并且不断增加



在本例中为

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"));

最新更新