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

C语言替换字符串指定字符为_程序运行输出与预期不符如何解决

问题原因
  • 传入的参数是字符串字面量:C语言中"hello"这类直接写在代码里的字符串属于只读常量,存储在进程的只读数据段,对其内容做修改属于未定义行为,大多数情况下修改操作会被系统直接忽略,甚至可能触发段错误崩溃。
  • 函数参数加了const修饰:const char secret[]的语义是声明secret指向的字符数组内容不可修改,编译器在编译阶段就会禁止对secret[i]的赋值操作,你这里能编译通过大概率是忽略了编译警告。
  • 额外小问题:代码中存在变量名拼写错误,seret_lenght应为secret_length,不过该问题不影响核心逻辑运行。
修复方案

只需要修改两处即可实现预期效果:

  1. main函数中将需要修改的字符串存储在可写的字符数组中,不要直接传入字符串字面量
  2. 去掉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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:06:08