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

C语言自定义mymemcpy函数打印字符串出现末尾多余字符问题

问题根因

你代码里给目标字符串加终止符的语句写错了,根本没有成功写入'\0'空终止符:

  • 你写的dst[j] = "\0";中,双引号包裹的"\0"是字符串常量,本质是char*类型的指针,指向只读存储区里的字符数组。你把一个指针值赋值给char类型的数组元素,只会把指针地址的低8位截断存进去,这个值不是ASCII码为0的空终止符。
  • 你逐字符循环打印前10个字节时,读的是手动拷贝的10个有效字符(HELLO WORD刚好占10个字节),所以这部分输出完全正常。
  • printf的%s格式打印字符串的规则是:从传入的地址开始逐字节读取,直到遇到值为0的字节才会停止输出。因为你没在预期位置写入0值,函数会继续读取dst数组后方栈空间里的未初始化随机脏数据,直到碰巧碰到内存里的0字节才停下,这就是末尾出现异常乱码的原因。
修复方法

把mymemcpy函数里错误的终止符赋值语句,从双引号改成单引号即可:

// 错误写法:dst[j] = "\0";
// 正确写法:
dst[j] = '\0';

单引号包裹的'\0'才是char类型、值为0的空终止符,写入后%s打印到这个位置就会正常停止,不会再输出后面的乱码。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:36:27