You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义strcmp函数异常:相同字符串返回83而非0求助

自定义strcmp函数返回值异常的问题分析与修复

你写的xstrcmp函数在字符串完全相同时返回随机值(比如你遇到的83),问题出在循环逻辑上:
当两个字符串完全相等时,循环会持续执行到*s1和*s2都是字符串结束符'\0',此时*s1-*s2==0会触发循环体,执行*s1++和*s2++后,指针会指向'\0'后面的未知内存区域。退出循环后返回的*s1-*s2就是这块未知内存的值差,所以会得到随机结果。

修复后的代码

只需要在循环内判断当前字符是否为'\0',如果是就直接返回0,避免指针越界:

#include <stdio.h>
int xstrcmp(char *, char*);
int main() {
    int i;
    char string1[]="SUNDAY";
    char string2[]="SUNDAY";
    i=xstrcmp(string1,string2);
    printf("\n %d\n",i);
    return 0;
}
int xstrcmp(char *s1, char *s2)
{
    while(*s1 == *s2)
    {
        // 到达字符串末尾,说明两串完全相等
        if(*s1 == '\0')
            return 0;
        // 直接移动指针,无需解引用
        s1++;
        s2++;
    }
    return *s1 - *s2;
}

补充说明

  • 原代码里的*s1++属于冗余写法,我们只需要移动指针,不需要读取指针指向的值,直接写s1++更简洁。
  • 修复后的逻辑完全符合标准strcmp的行为:相等返回0,s1对应字符的ASCII值更大返回正数,反之返回负数。

内容的提问来源于stack exchange,提问作者Vinayak Deshmukh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:37:13