C语言替换字符串指定字符为_程序运行输出与预期不符如何解决
问题原因
- 传入的参数是字符串字面量:C语言中
"hello"这类直接写在代码里的字符串属于只读常量,存储在进程的只读数据段,对其内容做修改属于未定义行为,大多数情况下修改操作会被系统直接忽略,甚至可能触发段错误崩溃。 - 函数参数加了
const修饰:const char secret[]的语义是声明secret指向的字符数组内容不可修改,编译器在编译阶段就会禁止对secret[i]的赋值操作,你这里能编译通过大概率是忽略了编译警告。 - 额外小问题:代码中存在变量名拼写错误,
seret_lenght应为secret_length,不过该问题不影响核心逻辑运行。
修复方案
只需要修改两处即可实现预期效果:
- main函数中将需要修改的字符串存储在可写的字符数组中,不要直接传入字符串字面量
- 去掉replace函数参数的
const修饰,允许修改数组内容,同时补充缺失的标准库头文件声明
修复后完整代码
#include <stdio.h> #include <string.h> // 去掉const修饰,允许修改数组内容 void replace(char secret[]){ int secret_length = strlen(secret); int i; for(i=0; i<secret_length; i++){ if(secret[i] == 'h'){ secret[i] = '_'; } } printf("%s", secret); } int main(){ // 用字符数组存储字符串,存储在栈区可修改 char str[] = "hello"; replace(str); return 0; }
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

