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

C语言strcpy函数行为异常:原数组被修改、越界复制成功?

strcpy越界导致的内存异常解析

为什么name数组会被修改?

  • strcpy的工作逻辑是从源字符串起始地址逐个复制字节,直到遇到'\0'为止,完全不检查目标数组的容量。
  • 你代码里的"The Batman"包含结束符'\0'一共是11个字节(不是注释里的10个),而name2只有5个字节的存储空间。执行strcpy时,会把11个字节全部往name2写入,必然超出name2的内存边界,写到相邻的内存区域。
  • C语言中局部变量通常在栈上连续分配(具体顺序由编译器决定),如果name2的内存地址刚好和name相邻,越界写入的字节就会直接覆盖name的内容。你看到name变成"atman",就是因为name的前几个字节被越界数据覆盖了。

为什么name2容量不足却看似“成功”完成赋值?

  • 这不是真正的成功,而是未定义行为的一种表现。strcpy没有边界校验机制,它不会判断目标数组能否容纳源字符串,只要内存可访问就会持续复制。
  • 这种越界写入极度危险:轻则破坏其他变量的内存(比如你的name被修改),重则覆盖栈帧关键数据导致程序崩溃,甚至引发安全漏洞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:42:16