in this example
for(int i = 0; i < 4; i++) {
char c = 's';
printf("%d\n", strcmp(&c, "s"));
}
output : 0, 1, 2, 3
why the return values of function strcmp() in for(){} are different and increasing?
The code snippet has undefined behavior because the function strcmp
is designed to compare strings. But the pointer expression &c
in this statement
printf("%d\n", strcmp(&c, "s"));
does not point to a string. It points to a single object of the type char after which the memory can contain anything.
So it seems the memory after the object c
is somehow being overwritten in each iteration of the for loop after the statement above.
Instead you should write
const char *c = "s";
printf("%d\n", strcmp(c, "s"));