You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:06:04