1

我是 C 语言的新手。拜托,有人能告诉我为什么在使用我自己的实现比较不同的字符串时我总是得到零作为输出strcmp吗?

我编写了xstrcmp比较两个字符串的函数:如果它们相等,则返回 0;否则,它返回第一个不匹配字符对的 ASCII 值之间的数值差。

    #include<stdio.h>

    int xstrcmp(char*,char*);

    int main()
    {   
        int i;
        char string1[]="jerry";
        char string2[]="ferry";
        i=xstrcmp(string1,string2);
        printf("difference=%d\n",i);
        return 0;
    }

    int xstrcmp(char*p,char*q)
    {
        int m;
        while(*p!=*q)
        {
             if((*p=='\0')&&(*q=='\0'))
                break;
          p++;
          q++;
        }
        m=(*p)-(*q);
        return m;
    }
4

2 回答 2

3

你循环直到你找到相等的字符,然后你减去它们——所以结果当然总是 0。

此外,循环内的条件总是会失败......如果字符不相等,它们不能都是 NUL。

这应该足以让您修复代码。

于 2012-07-09T08:49:57.223 回答
0

你总是得到零的原因是你的while循环while(*p!=*q)意味着只要字符不同,循环就会执行。

当 *p 和 *q 具有相同的值时,将退出循环。

因此返回值m=(*p)-(*q);永远为零。

while (*p == *q) /* as long as they have same value, loop; otherwise exit */
{
      p++; /* increment the pointers */
      q++;
}
return (*p)-(*q);

将是要走的路。

于 2012-07-09T09:31:58.070 回答