C语言如何将接收char数组的双逗号检测函数改为接收char*参数
C语言双逗号检测函数修改指南
形参类型转换方法
C语言中数组作为函数形参时会自动退化为指向首元素的指针,char a[]和char* a作为形参语义完全等价。你只需要直接修改函数定义的首行,将形参声明改为char* a即可完成需求要求的参数类型适配。
原代码Bug修复
原代码存在三处影响运行的语法和逻辑问题:
- 字符比较误用双引号:C语言中单引号包裹单个字符,双引号包裹字符串(本质为常量指针),原代码用
" "、","和字符变量比较属于类型不匹配,逻辑完全错误。 - 重复执行下标自增:for循环头部已经定义了
i++,循环体内又额外添加i++,会导致每次循环跳过一个字符,出现漏检。 - 字符串遍历长度硬编码:固定循环128次会在输入字符串短于128时访问越界内存,应该以字符串结束符
'\0'作为循环终止条件。
修复后完整代码
int findDoubleComma(char* a) { int comma = 0; int i; for(i = 0; a[i] != '\0'; i++) { if(a[i] == ' ') continue; if(a[i] != ',') { comma = 0; } else { if(comma == 1) return -100; comma = 1; } } return 1; }
代码逻辑说明
保留了你原本的“跳过空格后检测连续逗号”的逻辑:用comma变量标记上一个非空格字符是否为逗号,遇到逗号时若标记已为1则说明检测到连续双逗号,直接返回-100;遍历完整个字符串都没有检测到则返回1。
内容的提问来源于stack exchange,提问作者Halel Gabber
相关产品推荐
相关产品推荐

