C语言字符串连续相同字符检测代码异常排查
问题诊断与修复方案
1. 核心错误:scanf格式符使用错误
你当前代码中用%d作为scanf的格式符,%d是用于读取整数的格式符,无法正确读取字符串输入,导致输入的字符串根本没有正确写入inp数组,所以seqCount函数无论如何都检测不到连续字符,始终返回FALSE。
修复方案:将scanf("%d", &inp);改为scanf("%s", inp);,注意字符串数组名本身就是地址,不需要加取地址符&。
2. 潜在边界问题:循环越界风险
seqCount函数的循环条件inp[i] != '\0'会导致当i指向字符串末尾的\0前一个字符时,inp[i+1]访问的是字符串结束符\0,虽然这个问题在当前逻辑下不会触发错误结果,但属于不规范的内存访问,建议优化循环条件,同时可以增加提前终止逻辑提升效率,找到连续字符后无需遍历整个字符串。
修复后的完整代码
#include <stdio.h> #define TRUE 1 #define FALSE 0 int seqCount (char inp[]) { int countChar = 0; // 优化循环条件避免越界 for(int i = 0; inp[i] != '\0' && inp[i+1] != '\0'; i++){ if(inp[i] == inp[i+1]){ countChar++; // 找到连续字符后直接终止循环 break; } } return countChar > 0 ? TRUE : FALSE; } int main () { char inp[100]; printf("Enter the string: \n"); // 修正格式符,去掉多余的取地址符 scanf("%s", inp); if(seqCount(inp)){ printf("The string contains a sequence.\n"); } else{ printf("The string does not contain a sequence.\n"); } return 0; }
内容的提问来源于stack exchange,提问作者josef_uncovsky
相关产品推荐
相关产品推荐

