以下是一个例子:
int main()
{
char string1[8];
char string2[7];
strcpy(string1, "Heloooo");
strcpy(string2, "Helloo");
printf("%d", strcmp(string1[2], string2[5]));
return(0);
}
不会返回任何内容,即使它应该返回&gt; 0,0或<0。如果我删除索引,但是:
printf("%d", strcmp(string1, string2));
它会正常工作。有人能告诉我我在这里做错了吗?
答案 0 :(得分:1)
strcmp
需要一对字符指针,而string1[x]
不是指针,而是一个字符:
printf("%d", strcmp(&string1[2], &string2[5]));
或
printf("%d", strcmp(string1+2, string2+5));
请注意,虽然string1
和string2
是数组,但C编译器会将它们转换为字符指针,而无需其他运算符。
答案 1 :(得分:0)
函数strcmp
期望指针作为参数。查看原型:int strcmp(const char * s1, const char * s2)
;
string1[2]
和string2[5]
只是字符'l'
和'o'
。
printf("%d", strcmp(string1[2], string2[5])); // will not compile
printf("%d", strcmp(&string1[2], &string2[5])); // will return -3 with my compiler GCC 5.3.0
&string1[2]
是指向string1[2]
字符
&string2[5]
是指向string2[5]
字符
注意:
strcmp()和strncmp()函数返回一个小于的整数, 如果s1(或其前n个字节)是等于或大于零 发现分别小于,匹配或大于s2。
但是,确切的返回值取决于实现。
对于此实施:
int strcmp_fast (const char * s1, const char * s2)
{
for(; *s1 == *s2; ++s1, ++s2)
if(*s1 == 0)
return 0;
return *(const unsigned char *)s1 - *(const unsigned char *)s2;
}
的
printf("%d", strcmp_fast(&string1[2], &string2[5]));
打印值为-3
。
答案 2 :(得分:0)
str [ndx]求值为char但函数需要char *,[]产生l值,这样你就可以得到它的地址&amp; str [ndx]并获得你想要的东西。