news 2026/3/27 22:04:02

C语言 strcpy和memcpy 异同/区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言 strcpy和memcpy 异同/区别

memcpystrcpy是 C 语言中用于内存 / 字符串拷贝的核心函数,二者设计目标、拷贝规则、适用场景差异显著,下面从核心定义、关键区别、使用场景、安全风险四个维度详细对比:

一、核心定义(基础知识)

二、关键区别(核心差异)

1. 拷贝终止条件(最核心)
  • strcpy\0为终止符,会从src开始逐字节拷贝,直到遇到\0(包括\0也会拷贝到dest),不检查目标缓冲区长度
    • 例:src = "abc"(实际内存是a b c \0),strcpy会拷贝a、b、c、\0共 4 个字节。
  • memcpy以指定长度n为终止条件,不管内存中是否有\0,都会严格拷贝n个字节,是 “无脑” 的内存块拷贝。
    • 例:memcpy(dest, src, 3)只会拷贝 3 个字节,哪怕src中间有\0或末尾无\0
2. 处理的数据类型
  • strcpy仅适用于字符串char类型),因为依赖\0识别结束,拷贝非字符串(如结构体、数组)会出错。
  • memcpy通用型内存拷贝,支持任意数据类型(int、结构体、数组、二进制数据等),因为参数是void*(无类型指针),可接收任意类型的内存地址。
    • 例:拷贝结构体 / 数组:

      c运行

      // 用memcpy拷贝int数组(strcpy无法实现) int arr1[] = {1,2,3}, arr2[3]; memcpy(arr2, arr1, sizeof(arr1)); // 拷贝整个数组
3. 源内存重叠处理
  • strcpy不处理内存重叠,若srcdest内存重叠(如dest指向src+1),结果未定义(可能拷贝出错)。
  • memcpy:标准未要求处理重叠,但大部分编译器(如 GCC)的实现也不处理重叠;若需处理重叠,需用memmovememmovememcpy的安全升级版)。
    • 注意:strncpy(strcpy 的长度限制版)也不处理重叠。
4. 参数与返回值
  • 参数:
    • strcpy参数限定为char*,只能操作字符串;
    • memcpy参数为void*,需手动指定拷贝长度n(通常用sizeof计算)。
  • 返回值:
    • 两者都返回dest的起始地址(方便链式调用),但strcpy返回char*memcpy返回void*(需强制类型转换)。

三、使用场景(何时用哪个)

四、安全风险(重点注意)

  1. strcpy 易导致缓冲区溢出:因为不检查dest缓冲区长度,若src长度超过dest,会覆盖内存中其他数据,引发程序崩溃、安全漏洞(黑客常利用此漏洞攻击)。✅ 替代方案:用strncpy(dest, src, sizeof(dest)),指定最大拷贝长度。

  2. memcpy 需确保 n 不越界:若n超过dest缓冲区大小或src的实际长度,同样会溢出,需手动保证n的正确性(通常用sizeof计算)。

strcpy是 “字符串专属拷贝”,靠\0收尾;memcpy是 “万能内存拷贝”,靠长度说话

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 6:06:50

视觉测试选型难题,Open-AutoGLM和Applitools到底怎么选?

第一章:视觉测试选型难题,Open-AutoGLM和Applitools到底怎么选?在自动化测试领域,视觉回归测试正成为保障前端一致性的关键环节。面对 Open-AutoGLM 与 Applitools 两大主流方案,团队常陷入技术选型困境。两者在架构设…

作者头像 李华
网站建设 2026/3/27 4:59:55

论文写作的混沌与秩序:AI如何成为学术创作的“第二大脑”

清晨的图书馆里,键盘敲击声此起彼伏,一位研究生对着屏幕上十几个混乱的窗口陷入沉思——这是今天第几次在不同工具间切换了?深夜两点,图书馆依然灯火通明。你可能正在用 Zotero 整理参考文献,切换到 Word 修改论文&…

作者头像 李华
网站建设 2026/3/27 3:47:21

从学术囚徒到思想向导:当AI开始为你的论文提供“逆天改命”级引导

凌晨两点,某985高校宿舍里,电脑屏幕的光芒映照着一张满是焦虑的脸——文献管理软件里躺着137篇未读PDF,Word文档里的红色批注比正文还多,而论文提交截止日期只剩下72小时。这不是什么学术悬疑片开场,而是每年毕业季数百…

作者头像 李华
网站建设 2026/3/27 12:55:55

手机端自动化测试转型必看:Open-AutoGLM与Selenium适配差异带来的3大机遇与挑战

第一章:手机端自动化测试转型的背景与趋势随着移动互联网技术的飞速发展,智能手机应用已深度融入用户的日常生活。面对日益复杂的业务场景和快速迭代的开发节奏,传统的手工测试方式在效率、覆盖率和可重复性方面逐渐暴露出明显短板。企业亟需…

作者头像 李华
网站建设 2026/3/26 17:13:58

还在手动做报价?,Open-AutoGLM让95%流程自动化已成行业标配

第一章:还在手动做报价?Open-AutoGLM已改写行业规则在传统企业服务流程中,报价环节长期依赖人工核算成本、调取参数、比对方案,不仅耗时易错,还难以应对高频、多变的客户需求。Open-AutoGLM 的出现彻底打破了这一僵局—…

作者头像 李华
网站建设 2026/3/27 15:09:01

【独家分析】Open-AutoGLM如何实现对TestComplete的功能全面超越

第一章:Open-AutoGLM与TestComplete的架构设计对比在自动化测试与智能代码生成领域,Open-AutoGLM 与 TestComplete 代表了两种截然不同的技术路径。前者基于大语言模型驱动,强调语义理解与自动生成能力;后者则是传统企业级自动化测…

作者头像 李华