通过指针比较字符串

时间:2012-07-09 08:46:14

标签: c string-comparison

我是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;
    }

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分: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);

将是要走的路。