C语言字符转换器问题排查:替换错误与循环失效
问题成因分析
问题1:输入“ཀ”或“ཁ”均输出双引号的原因
- 函数参数类型不匹配:
ConvertChars的参数定义为char *convertedChars[](字符指针数组),但调用时传入的是inpString(单个字符指针)。类型不匹配会导致strpbrk接收到错误的指针,触发未定义行为,可能误判字符串中存在“ཁ”字符。 - 条件分支未互斥:两个
if语句顺序执行而非if-else结构。即使输入仅匹配第一个条件,若后续条件因未定义行为被误触发,第二个strcpy会直接覆盖outString的内容,最终只保留最后一次赋值结果。 - 字符串覆盖而非追加:每次调用
strcpy(outString, "...")都会完全替换outString的现有内容,而非在末尾追加转换后的字符。
问题2:for循环未生效、多字符输入仅输出一个转换字符的原因
- 循环处理对象错误:
for循环中每次调用ConvertChars(inpString)时,传入的是整个输入字符串,而非当前循环对应的单个字符inpString[i]。这导致每次循环都在重复处理整个字符串,而非逐个字符转换。 - 循环边界错误:
i <= strlen(inpString)的条件会让循环多执行一次(字符串有效索引范围是0到strlen(inpString)-1),多余的迭代可能引发额外错误。 - 结果持续被覆盖:每次
ConvertChars调用都会用strcpy覆盖outString,即便循环逻辑正确,最终也只会保留最后一次转换的结果,无法拼接所有转换后的字符。
内容的提问来源于stack exchange,提问作者TouhouLinuxFan
相关产品推荐
相关产品推荐

