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

C语言字符串修改函数异常:调用后未按预期修改字符的问题排查

问题分析与修复方案

你的代码存在两个关键问题,导致无法得到预期结果:

1. 循环条件完全错误

原代码中for (i=0; i!='\0'; i++)的判断逻辑错误:i是循环索引(整数类型),'\0'的ASCII值为0,这意味着循环仅在i != 0时执行,但i初始值就是0,循环直接跳过,根本不会修改任何字符。

正确的条件应该是判断当前遍历到的字符串字符是否为结束符,即s[i] != '\0',这样才能遍历完字符串的所有有效字符。

2. 修改只读字符串字面量的未定义行为

你在调用时传递的"test"是字符串字面量,在C标准中,字符串字面量存储在只读数据段,尝试修改它属于未定义行为——可能导致程序崩溃、修改无效或其他不可预测的结果。必须使用可修改的字符数组来存储需要修改的字符串。


修改后的完整代码

char *stralt(char *s, char ch)
{
    int i;
    // 修正循环条件:遍历到字符串结束符为止
    for (i=0; s[i] != '\0'; i++)
        s[i] = ch;
    return s;
}

int main()
{
    // 使用可修改的字符数组存储字符串
    char str[] = "test";
    printf("%s", stralt(str, 'x'));   
    return 0; // 补充符合C标准的返回值
}

修改后,程序会正确遍历字符串的每个字符并替换为'x',最终输出xxxx。

内容的提问来源于stack exchange,提问作者Gauss-00

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:41:12