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

C语言memcpy,memmove的介绍及模拟实现

文章目录

  • 每日一言
  • memcpy
    • 介绍
    • 模拟实现
  • memmove
    • 介绍
    • 模拟实现
      • 思路
      • 代码
  • 结语

每日一言

If you want to lift yourself up, lift up someone else.
如果你想振奋自己, 先振奋周遭的人。

memcpy

介绍

函数原型:

void *memcpy(void *dest, const void *src, size_t n);

其中,dest是指向目标内存地址的指针,src是指向源内存地址的指针,n是要复制的字节数。
memcpy函数的工作原理是直接从源内存地址复制指定数量的字节到目标内存地址,可以高效地进行大量数据的复制操作,并且在操作过程中不会改变目标内存地址中的数据类型。

在使用memcpy函数时需要注意源内存地址和目标内存地址之间不能有重叠,否则会产生未定义的行为。

模拟实现

void* my_memcpy(void*dest,const void*arr,size_t num)
{for (int i = 0; i < num; i++){*((char*)dest + i) = *((char*)arr + i);}return dest;
}

memmove

介绍

函数原型:

void *memmove(void *dest, const void *src, size_t n);

其中,dest 表示目标内存地址,src 表示源内存地址,n 表示要移动的数据字节数。
memmove 函数会将 src 指向的内存中的数据复制到 dest 指向的内存中,共复制 n 个字节。在复制过程中,如果 src 与 dest 所指内存区域有重叠,memmove 函数会正确处理数据,避免出现数据损坏的情况。

模拟实现

思路

  1. 判断源地址和目标地址的大小。
  2. 根据复制方向,选择正确的复制方式。
    如果源地址小于目标地址,则从后往前拷贝。
    如果源地址大于目标地址,则从前往后拷贝。
  3. 返回目标内存区域的起始地址。

代码

void* my_memmove(void* dest, const void* arr, size_t num)
{if (dest<arr){for (int i = 0; i < num; i++){*((char*)dest + i) = *((char*)arr + i);}}else{while (num--){*((char*)dest + num) = *((char*)arr + num);}}return dest;
}

结语

请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
想成为大佬那就保持空杯心态加油努力吧!


都看到这里啦!真棒(*^▽^*)

可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家

编程小白写作,如有纰漏或错误,欢迎指正


http://www.lryc.cn/news/251575.html

相关文章:

  • 克服.360勒索病毒:.360勒索病毒的解密和预防
  • 21、Resnet50 中包含哪些算法?
  • pybind11教程
  • Java基础- 自定义类加载器
  • 2022年高校大数据挑战赛A题工业机械设备故障预测求解全过程论文及程序
  • 洛谷 P1998 阶乘之和 C++代码
  • 洛谷 B2006 地球人口承载力估计 C++代码
  • 少走弯路:OpenCV、insightface 等多方案人脸推理和识别
  • github代码连接vercel 建立一个公用网站
  • 使用pandas将字符串格式数据转换为单独的行
  • 【Tkinter 入门教程】
  • 深入理解Java中继承的高级使用方案
  • nexus私服开启HTTPS
  • 融合CFPNet的EVC-Block改进YOLO的太阳能电池板缺陷检测系统
  • 传媒行业CRM:打造高效客户管理,提升品牌影响力
  • 基于深度学习的肺炎CT图像检测诊断系统
  • YOLOv8改进 | 2023 | SCConv空间和通道重构卷积(精细化检测,又轻量又提点)
  • Python 全栈体系【四阶】(一)
  • Git【成神路】
  • 文件操作详解
  • 模块 A:web理论测试
  • git rebase冲突说明(base\remote\local概念说明)
  • 函数式接口的妙用,让异步执行更简单
  • 读书笔记:《More Effective C++》
  • 手写VUE后台管理系统6 - 支持TS声明文件.d.ts
  • 第八天:信息打点-系统端口CDN负载均衡防火墙
  • 一款充电桩解决方案设计
  • Leetcode 2953. Count Complete Substrings
  • 【Python-第三方库-pywin32】随笔- Python通过`pywin32`获取窗口的属性
  • Flask使用线程异步执行耗时任务