C语言字符串字符对替换实现及代码异常输出问题排查
问题排查与修正
错误原因
- 打印语句位置错误:你把
printf("%s", string);写在了for循环内部,循环每执行一次就会完整打印一次当前字符串,才会出现多次重复拼接的输出结果。比如输入1234ax,前4次循环遍历到1/2/3/4时没有触发替换,每次都会打印一次1234ax;触发替换后你把i重置为0,循环重新从头开始,后续每次循环又会打印替换后的123457,最终就是你看到的重复输出。 - 匹配成功后的i值重置逻辑错误:你匹配到
ax之后直接把i设为0,会导致循环从头开始重复遍历已经处理过的字符,不仅效率极低,还有概率出现逻辑死循环。正确的处理是匹配成功后主动让i加1,跳过已经处理过的第二个字符,下一轮循环直接从i+2的位置开始判断即可。 - 额外安全风险:
scanf("%s", string);没有限制输入长度,你的字符数组只有16字节长度,输入超过15个字符就会出现缓冲区溢出,建议改为scanf("%15s", string);。
修正后代码
#include <stdio.h> #include <stdlib.h> int main() { int i; char string[16]; scanf("%15s", string); for(i=0; string[i]; i++){ if(string[i] == 'a' && string[i+1] == 'x'){ string[i] = '5'; string[i+1] = '7'; // 跳过已处理的第二个字符,避免重复判断 i++; } } // 循环结束后统一打印结果 printf("%s", string); exit(0); }
内容的提问来源于stack exchange,提问作者Tobi Kanovi
相关产品推荐
相关产品推荐

