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

C语言通过函数更新char数组输出乱码,不使用额外库如何解决

问题原因
  • C语言函数参数为值传递:update函数内的buff是独立的形参,直接给buff赋值只会修改当前函数内的局部指针变量,不会改变外部rb数组的指向,外部rb数组始终是未被修改的原始状态,所以打印的是未初始化的垃圾值。
  • 局部数组生命周期不合法:函数内的word是栈区局部变量,函数执行结束后该内存会被系统回收,即使你能把地址传回外部,访问该地址也是非法操作,必然得到垃圾值。
修复方案

因限制不能使用其他库,我们直接手动逐字符复制字符串到目标数组即可,无需引入<string.h>等额外库的函数:

#include <stdio.h>
void update(char* buff){
    char word[] = "HII_O";
    // 直接操作buff指向的内存(即外部rb数组的空间),不修改buff指针本身的指向
    for(int i = 0; word[i] != '\0'; i++){
        buff[i] = word[i];
    }
    return;
}

int main(){
    char rb[6];
    update(rb);
    rb[5] = '\0';
    printf("[%s]\n",rb);
    return 0;
}

修复后程序会正常输出[HII_O],完全符合使用约束。

内容的提问来源于stack exchange,提问作者ancad ancad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:48:03