当前位置: 首页 > news >正文

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是 “万能内存拷贝”,靠长度说话

http://www.cnnetsun.cn/news/174138.html

相关文章:

  • 【顶级测试架构师亲授】:Open-AutoGLM对接Sauce Labs的7步完美适配法
  • 大数据时代MongoDB的性能瓶颈与解决办法
  • 【Open-AutoGLM vs Applitools】:谁才是视觉测试的终极王者?
  • 【专家亲测】Open-AutoGLM与UiPath操作复杂度全面拆解(含学习曲线数据)
  • Open-AutoGLM vs WinAutomation:高并发场景下谁更稳定?(实测结果曝光)
  • 为什么你的自动化项目失败了?Open-AutoGLM与Power Automate适配性全剖析
  • Thinkphp和Laravel框架社区物业车位缴费房屋充电桩管理系统 论文
  • 你真的了解Open-AutoGLM与Katalon Studio的适配边界吗?
  • 【测试工程师必看】Open-AutoGLM与Katalon Studio适配差异的5大关键点
  • 【自动化平台选型避坑指南】:Open-AutoGLM与Power Automate 6大场景实测对比
  • Vue3+TypeScript+Element-Plus确认对话框ElMessageBox.confirm
  • 企业流程自动化怎么选,Open-AutoGLM和Power Automate到底差在哪?
  • 为什么99%的人没发挥Open-AutoGLM全部潜力?,解锁隐藏的动态权重调优功能
  • 批量打印神器,太流批了
  • 【Java毕设全套源码+文档】基于springboot的大学生兼职平台设计与实现(丰富项目+远程调试+讲解+定制)
  • 从零开始学昇腾Ascend C算子开发-第四篇:常用算子实现
  • 学术迷航中的“智能罗盘”:书匠策AI如何重塑本科硕士论文写作新范式
  • 为什么90%的企业都在用Open-AutoGLM做客户信息归档?真相曝光
  • Open-AutoGLM实时跟进系统搭建全流程(含源码级避坑指南)
  • 【AI驱动销售革命】:Open-AutoGLM如何实现线索筛选效率提升10倍
  • 告别加班写年报!Open-AutoGLM自动写作系统实测效果曝光(附对比数据)
  • Open-AutoGLM数据同步实战指南(从配置到监控全链路拆解)
  • 【Open-AutoGLM邮件分类实战】:手把手教你构建企业级智能筛选系统
  • Java全栈工程师面试实录:从基础到实战的深度探讨
  • Open-AutoGLM核心原理深度解析:NLP+知识图谱如何重塑周报流程?
  • 【独家披露】某头部科技公司如何用Open-AutoGLM实现周报零人工干预
  • 揭秘Open-AutoGLM自动回邮系统:如何3步实现企业级智能响应?
  • Open-AutoGLM月报统计避坑指南:资深工程师总结的7大常见错误
  • 5步搞定Open-AutoGLM周报集成,让每周汇报不再加班到凌晨
  • Open-AutoGLM现场将发布什么?10位顶尖专家透露的惊人线索