对于memcpy和memmove的区别,以及模拟实现memcpy和memmove

简介: 对于memcpy和memmove的区别,以及模拟实现memcpy和memmove

直接上源代码

对于memcpy和memmove来说其用法几乎一致所以在模拟实现时我分成了两份

第一份

对于memcpy来说在有一些编译器下并不会考虑重叠的情况即一下是不考虑重叠时候的代码:

void* my_memcpy(void* des, const void* sor, size_t num)
{
  assert(des && sor);
  void* ret = des;//该函数返回des的地址
  while(num--)
  {
    *((char*)des) = *((char*)sor);
    ++(char*)des;
    ++(char *)sor;
  }
  return  ret;
}

第二份

而有时候(vs环境IDE)的memcpy又会考虑重叠的情况所以此时的代码和memmove相同

void* my_memmove(void* des, const void* sor, size_t num)
{
  assert(des && sor);
  void* ret = des;//该函数返回des的地址
  if (des < sor)//从前往后将sor的前面开始放进des的前面
  {
    while (num--)
    {
      *((char*)des) = *((char*)sor);
      ++(char*)des;
      ++(char*)sor;
    }
  }
  else//des > sor 将sor从后往前放进des的后面
  {
    while (num--)//并且此处刚好num-- 指向正确的位置,否则还需要num-1
    {
      *((char*)des + num) = *((char*)sor + num);
    }
  }
  return  ret;
}
int main()
{
  char arr[] = "cdefgq";
  char arr1[] = "ab";
  //printf("%s\n",(char *)memmove(arr+3, arr+2,2));//第三个参数是以byte为单位的,但是不将\0拷贝进去、
  printf("%s", (char*)my_memmove(arr+3, arr+2, 2));
  return 0;
}

最后,对于memcpy的是否考虑重叠问题是不确定的所以在使用memcpy时有几个建议

  1. 在没有重叠问题时用memcpy,在有重叠时用memmove
  2. 或者直接摒弃memcpy,来只使用memmove
相关文章
|
安全 Linux Shell
CentOS7下快速升级至OpenSSH9.3p2安全版本
CentOS7下快速升级至OpenSSH9.3p2安全版本
755 0
|
人工智能 搜索推荐 安全
打造精准营销!营销电子邮件以客户为中心策略解析!
营销电子邮件是数字营销的核心,用于建立客户关系、推广产品和服务,提高品牌忠诚度和转化率。它们在客户旅程中扮演关键接触点角色,如欢迎邮件、购物车提醒和个性化推荐。电子邮件营销能提升品牌知名度,细分营销可带来760%的收入增长。然而,大量邮件可能导致邮件过载,缺乏个性化可能引起收件人反感,甚至网络安全问题。收件人和IT团队可通过过滤、优化设置、启用2FA等措施改善体验。营销团队则需克服管理、个性化和法规遵从等挑战,采用先进技术同时确保隐私和安全,以同理心驱动的策略建立客户连接,实现业务成功。
262 1
打造精准营销!营销电子邮件以客户为中心策略解析!
|
存储 API 索引
一文让你搞懂 Python 虚拟机执行字节码的奥秘
一文让你搞懂 Python 虚拟机执行字节码的奥秘
207 1
|
11月前
|
安全 物联网 物联网安全
智能物联网安全:物联网设备的防护策略与最佳实践
【10月更文挑战第27天】随着物联网技术的快速发展,智能设备已广泛应用于生活和工业领域。然而,物联网设备的安全问题日益凸显,主要威胁包括中间人攻击、DDoS攻击和恶意软件植入。本文探讨了物联网设备的安全防护策略和最佳实践,包括设备认证和加密、定期更新、网络隔离以及安全标准的制定与实施,旨在确保设备安全和数据保护。
500 0
|
传感器 自动驾驶 安全
未来出行的智能革命:自动驾驶技术的现状与前景
在科技迅猛发展的今天,自动驾驶技术正逐步从科幻走进现实。本文将深入探讨自动驾驶的技术原理、当前发展现状以及未来的应用前景。我们将从感知、决策和执行三个核心层面剖析自动驾驶系统的工作机制,并讨论其在不同场景中的应用。同时,通过分析技术发展面临的挑战和瓶颈,我们展望了自动驾驶技术的未来图景,并思考其可能对社会、经济和法律等方面带来的深远影响。
1125 3
|
JSON PHP Apache
[GFCTF 2021]Baby_Web(CVE-2021-41773) 从一道题入门PHP代码审计 (保姆级)
[GFCTF 2021]Baby_Web(CVE-2021-41773) 从一道题入门PHP代码审计 (保姆级)
139 1
|
人工智能 搜索推荐 算法
探索增强现实(AR)在零售业的潜力:重塑购物体验的未来
【8月更文挑战第7天】增强现实技术正在逐步改变零售业的面貌,为消费者带来全新的购物体验。从虚拟试衣间到产品信息展示,从营销创新到线上线下融合,AR技术在零售业的应用潜力巨大。随着技术的不断进步和应用场景的不断拓展,我们有理由相信,未来的零售业将更加智能、便捷和个性化。作为行业从业者,应积极拥抱AR技术,不断创新和优化自身的业务模式和服务方式,以适应市场的变化和消费者的需求。
|
JavaScript 关系型数据库 MySQL
❤Nodejs 第二章(Node连接本地数据库)
【4月更文挑战第2天】本文介绍了如何使用Node.js连接本地MySQL数据库。首先,提到了在MySQL官网下载安装数据库和使用Navicat for MySQL进行数据库管理。接着,通过`yarn add mysql`在项目中安装数据库依赖。然后,创建`app.js`文件,设置数据库连接参数,并建立连接进行查询操作。遇到导入模块的错误后,修改导入方式为CommonJS语法。
514 1
|
开发工具 git
git fatal: 拒绝合并无关的历史
记录一个git的错误, 以备以后查看
836 0
|
弹性计算 数据安全/隐私保护
带你读《弹性计算技术指导及场景应用》——1. 所以!云服务器也可以玩转大模型?(2)
带你读《弹性计算技术指导及场景应用》——1. 所以!云服务器也可以玩转大模型?(2)
212 2

热门文章

最新文章