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

