news 2026/4/22 14:43:57

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/4/18 9:17:12

基于VUE的驾校预约系统[VUE]-计算机毕业设计源码+LW文档

摘要:随着汽车保有量的不断增加,驾校业务日益繁忙,传统的手工预约和管理方式已难以满足驾校高效运营的需求。为了提高驾校的管理效率和服务质量,本文基于Vue框架设计并实现了一个驾校预约系统。该系统涵盖了系统用户管理、驾校通知…

作者头像 李华
网站建设 2026/4/22 16:53:37

揭秘Open-AutoGLM与Perfecto核心差异:5大维度全面测评,助你选型不踩坑

第一章:揭秘Open-AutoGLM与Perfecto的选型背景在构建新一代自动化代码生成与测试平台的过程中,技术栈的选型直接决定了系统的扩展性、智能化水平和工程落地效率。Open-AutoGLM 与 Perfecto 的组合脱颖而出,成为支撑智能开发闭环的核心组件。二…

作者头像 李华
网站建设 2026/4/22 6:22:43

别再盲目选型!Open-AutoGLM与Katalon Studio适配差异全曝光

第一章:Open-AutoGLM与Katalon Studio适配差异全景概览在自动化测试与智能代码生成融合发展的背景下,Open-AutoGLM 与 Katalon Studio 的集成成为提升测试效率的重要方向。然而,两者在架构设计、脚本生成机制及执行环境支持方面存在显著差异&…

作者头像 李华
网站建设 2026/4/21 23:24:35

为什么顶尖律所开始试用Open-AutoGLM?揭秘其背后的语义理解引擎

第一章:为什么顶尖律所开始试用Open-AutoGLM?法律行业正面临信息处理效率的临界点。面对动辄数万页的案件材料、复杂的合规条款与快速变化的判例体系,传统人工审阅方式已难以满足高精度、快响应的需求。在此背景下,开源自动化生成…

作者头像 李华
网站建设 2026/4/16 10:44:35

Thinkphp和Laravel框架高校大学生竞赛项目管理系统

目录具体实现截图项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理具体实现截图 本系统(程序源码数据库调试部署讲解)带文档1万字以上 同行可拿货,招校园代理 Thinkphp和Laravel框架高校大学生竞赛项目管理系统 项目开…

作者头像 李华
网站建设 2026/4/23 11:35:48

自动化工具怎么选,Open-AutoGLM和WinAutomation哪款更适合你?

第一章:自动化工具性能对比概述在现代软件开发与运维实践中,自动化工具已成为提升效率、保障系统稳定性的核心组件。面对种类繁多的自动化解决方案,如何科学评估其性能表现成为技术选型的关键环节。本章聚焦于主流自动化工具在执行效率、资源…

作者头像 李华