为什么 for(){} 中函数 strcmp() 的 return 值不同且递增?

why the return values of function strcmp() in for(){} are different and increasing?

在这个例子中

for(int i = 0; i < 4; i++) {
    char c = 's';
    printf("%d\n", strcmp(&c, "s"));
}

输出:0、1、2、3

为什么 for(){} 中函数 strcmp() 的 return 值不同且递增?

该代码段具有未定义的行为,因为函数 strcmp 旨在比较字符串。但是这个语句中的指针表达式&c

printf("%d\n", strcmp(&c, "s"));

没有指向字符串。它指向单个char类型的对象,之后内存可以包含任何内容。

因此,在上述语句之后的 for 循环的每次迭代中,对象 c 之后的内存似乎以某种方式被覆盖。

你应该这样写

const char *c = "s";

printf("%d\n", strcmp(c, "s"));