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
相关产品推荐
相关产品推荐

