为什么 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"));
在这个例子中
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"));