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

字符数组对应字符差值求和函数:循环越界问题及终止方式咨询

问题分析与修正方案

原代码的核心问题

  1. 错误的字符串结束判断:C语言中字符串是以'\0'(空字符)作为结束标志,而非换行符,原代码的判断逻辑完全错误。
  2. 循环终止条件错误:原循环while(flag1 == 0 && flag2 == 0)会在任意一个数组遍历完后立即停止,但根据需求,需要处理到两个数组都遍历完毕(比如示例中s比t长,需继续计算s剩余字符的差值,此时t对应位置视为0)。
  3. 数组越界风险:当其中一个数组已到结尾,原代码的逻辑会导致继续访问超出数组范围的内存,触发内存错误。

正确实现代码

int difference(char s[], char t[]) {
    int result = 0;
    int i = 0;

    while (1) {
        // 获取当前位置字符,已到结尾则用0代替
        char s_char = s[i] != '\0' ? s[i] : 0;
        char t_char = t[i] != '\0' ? t[i] : 0;

        result += (s_char - t_char);

        // 两个数组都到结尾时终止循环
        if (s[i] == '\0' && t[i] == '\0') {
            break;
        }

        i++;
    }

    return result;
}

代码说明

  • 循环持续到两个数组的当前位置都为'\0'时终止,确保所有对应位置都被处理。
  • 对已到结尾的数组,用0代替其字符参与计算,符合示例中s剩余字符直接累加的需求('B' - 0 = 'B')。
  • 避免越界访问:字符串的'\0'是合法存储的,后续访问该位置不会超出内存范围。

测试示例验证

对于s="3AB"(内存中为'3','A','B','\0'),t="7C"(内存中为'7','C','\0'):

  • i=0:'3'-'7' = -4,result=-4
  • i=1:'A'-'C' = -2,result=-6
  • i=2:'B'-0 = 66,result=60
  • i=3:0-0=0,此时s[3]和t[3]都是'\0',循环终止
    最终返回60,与需求一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:05:08