memmove():将 num 字节的值从所指向的位置复制到目标所指向的内存块。复制就像使用中间缓冲区一样进行,允许目标重叠。

当我们要模拟实现memmove函数时得考虑到字符未被移动而被其他字符覆盖

int main()
{int a1[10] = { 1,2,3,4,5,6,7,8,9,20 };int a2[5] = { 0 };int sz1 = sizeof(a1) / sizeof(a1[0]);my_memmove(a1, a1 + 2, 20);for (int i = 0; i < sz1; i++){printf("%d ", a1[i]);}return 0;
}

就比方说上面这段代码,我们要用my_memmove()获取我们想要得到的数组

3,4,5,6,7,6,7,8,9,20

但是如果原数组在移动时先将7覆盖5的话,那5这个数据便会缺失,使得我们的my_memmove()无法与memmove做到同样效果。

#include<stdio.h>
void* my_memmove(void* x, void* y, size_t mun)
{void* ret = x;if (x < y){while (mun--){*(char*)x = *(char*)y;x = (char*)x + 1;y = (char*)y + 1;}}else{while (mun--){*((char*)x + mun) = *((char*)y + mun);}}return ret;
}

所以可以分两种情况来进行数据移动,如上提供的代码一般。用一个参数mun控制移动数据的长度,移动量为地址*x与地址*y之间的距离量。倘若在同一组数组中,要移动数据的起始地址(*y)高于移动的末尾位置(*x),可以先从最终位置开始进行数据拷贝,在提供的数组中将*y的数据覆盖*x的数据;要移动数据的起始地址低于移动的最终位置,则将起始地址和最终位置都加上移动量,相当于从要移动的数据段的末尾开始拷贝数据

模拟实现memmove相关推荐

  1. 用c语言编程实现strcpy,用c语言.模拟实现strcpy,strcat,strcat,memcpy,memmove

    1.模拟实现strcpy #include #include #include #include char *my_strcpy(char *dst, const char *src) { asser ...

  2. memcpy、memmove、memcmp、memset函数的使用说明和模拟实现

    在前面的文章中,我已经对字符串函数进行了详细的介绍和模拟实现,今天,我来讲解另一类函数----------内存函数. 这里写目录标题 memcpy函数 memmove函数 memcmp函数 memse ...

  3. 《strcmp,strcpy,memcpy,memmove等函数模拟实现》

    模拟实现常见字符串函数比如:strcmp,strcpy,memcpy,memmove等函数 1.模拟实现memcpy函数 2.模拟实现memmove函数 3.模拟实现strstr函数 4.模拟实现st ...

  4. 字符函数、字符串函数、内存函数用法及其模拟实现

    目录 1.strlen strlen的模拟实现 2.strcpy strcpy模拟实现 3.strcat - 字符串追加 模拟实现strcat 4.strcmp - 比较字符串 模拟实现stcmp 5 ...

  5. 赶紧来修炼内功发~内存函数详解大全-memcpy、memmove、memcmp

    目录 1. memcpy EX: PS: 模拟实现: 2. memmove EX: ​编辑 模拟实现: 3. memcmp EX: PS: 模拟实现: 4. memset EX: 模拟实现: 1. m ...

  6. 详解memcpy和memmove函数的使用

    作者:~小明学编程 文章专栏:C语言基础知识 格言:目之所及皆为回忆,心之所想皆为过往 目录 memcpy 什么是memcpy? memcpy与strcpy的区别 memcpy 模拟实现memcpy ...

  7. C语言——字符串+内存函数及其模拟实现

    目录 0. 思维导图 1. 前言 2. 函数介绍 2.1 strlen 2.2 strcpy 2.3 strcat 2.4 strcmp 2.5 strncpy 2.6 strncat 2.7 str ...

  8. 【C库函数】memmove函数

    目录 memmove 函数原型 参数讲解 返回值讲解 函数讲解 相同点 不同点​​​​​​​ memmove 拷贝内存块到目标空间(目标地址和拷贝内容的地址可重叠) 函数原型 void *memmov ...

  9. 【内存拷贝函数:memcpy与memmove】

    文章目录 前言 一.memcpy函数(内存拷贝)的实验 二.memcpy函数的模拟实现 三.memmove函数(内存移动)的实验 四.memmove函数的模拟实现 总结 前言 c和c++使用的内存拷贝 ...

最新文章

  1. ATS 5.2.1中Background-Fetch插件调研笔记
  2. Zabbix监控MongoDB
  3. matlab 将矩阵A写入文件
  4. CSS对IE6、IE7、IE8支持详细的易用的参考
  5. .NET 6 攻略大全(三)
  6. python输入三个商品_用python3采集shopify站点商品
  7. User breakpoint called from code at 0x771064f4
  8. Android4.2中Phone的P-sensor的应用的分析。
  9. 人工智能-机器学习之seaborn(读取xlsx文件,小提琴图)
  10. atitit.解决SyntaxError: missing ] after element list不个object 挡成个str eval ....
  11. ubuntu系统安装百度云盘
  12. 计算机三级信息安全技术试题与答案,计算机三级《信息安全技术》练习题与答案...
  13. matlab仿真add,simulink中add和sum
  14. 三个div怎么分别靠左、居中、靠右显示
  15. idb 怎么回复mysql_MySql数据库通过idb和frm恢复
  16. 全面概述什么是人工智能?
  17. 如何画好架构图详解(建议收藏)
  18. [ITIL]-ITIL4考点考题
  19. 《沟通的方法》笔记十:激励
  20. Oulipo (KMP算法)

热门文章

  1. 帮我写一份1000字年终总结
  2. 流量劫持原理解析、流量劫持怎么办怎么解决
  3. VMware启动时提示我已移动或我已复制该虚拟机
  4. 开放、包容的Domino V11
  5. jcrop和php截图预览,利用jquery Jcrop和 php实现截图功能
  6. 全网最全Spring面试题之高级篇整理总结(共25题,附超详细解答)
  7. python fileinput_Python fileinput模块使用实例
  8. 标准库:fileinput
  9. if条件判断null和isEmpty()的区别
  10. Java Comparator comparingInt() 的使用