字符数组对应字符差值求和函数:循环越界问题及终止方式咨询
问题分析与修正方案
原代码的核心问题
- 错误的字符串结束判断:C语言中字符串是以
'\0'(空字符)作为结束标志,而非换行符,原代码的判断逻辑完全错误。 - 循环终止条件错误:原循环
while(flag1 == 0 && flag2 == 0)会在任意一个数组遍历完后立即停止,但根据需求,需要处理到两个数组都遍历完毕(比如示例中s比t长,需继续计算s剩余字符的差值,此时t对应位置视为0)。 - 数组越界风险:当其中一个数组已到结尾,原代码的逻辑会导致继续访问超出数组范围的内存,触发内存错误。
正确实现代码
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
相关产品推荐
相关产品推荐

