1、内存复制函数memcpy的模拟实现 void * my_memcpy(void * buf1, const void * buf2, int count)//内存复制函数 { assert(buf1); assert(buf2);//断言 char * dest = (char *)buf1; char * src = (char *)buf2;//强制类型转换为char*,便于复制 void * ret = buf1;//保留目标内存的首地址 while (count--) { *dest++ = *src++;//从前向后复制 没有考虑内存重叠 } return ret;//返回目标内存首地址 } 优点: 可以直接从内存复制,解决了字符串复制函数strcpy函数不能将包含多个'\0'的字符数组,完整的复制的问题。 缺点: 没有考虑内存重叠问题,例如:一个int数组arr[10]的内容为arr[10]={1,2,3,4,5,6,7,8,9,0};现在需要将3,4,5,三个数字,分别复制到5,6,7的位置,从前向后复制的时候,数字‘5’会丢失。 而memmove完整的解决了内存重叠问题 2、1、内存复制函数memmove的模拟实现 void * my_memmove(void * buf1, const void * buf2, int count)//内存移动函数 { assert(buf1); assert(buf2);//断言 char * dest = (char *)buf1; char * src = (char *)buf2;//强制类型转换为char*,便于复制 void * ret = buf1;//保留目标内存的首地址 if ((src<dest) && (src + count>dest)) //内存重叠则从后向前复制 { while (count--) { *(dest + count) = *(src + count); } } else { while (count--) { *dest++ = *src++;//从前向后复制 没有内存重叠 } } return buf1;//返回目标内存首地址 }
memcpy函数和memmove函数的模拟实现与区别
原创文章标签 memcpy函数和memmove函数的模 文章分类 C/C++ 后端开发
上一篇:模拟实现常用字符串函数
下一篇:回调函数实现冒泡法的多种排序
-
【C语言加油站】qsort函数的模拟实现
【C语言加油站】qsort函数的模拟实现本文详细介绍了使用冒泡排序的逻辑模拟实现可以排序任意类型数组的qsort函数……
C语言 qsort排序函数 冒泡排序 回调函数 void*指针 -
模拟实现memset,memcpy,memmove函数
模拟实现memset,memcpy,memmove函数memset功能是将s所指向的某一
#include i++ 内存区域 -
C语言模拟实现memcpy,memmove函数
C语言模拟实现memcpy,memmove函数
C语言.memcpy.memmov -
【C】内存函数及其模拟实现 —— memcpy | memmove | memcmp
用的比较少说实话,memcpy还是要注意一下。。。
c语言 #include i++ 字符串 -
memmove 和 memcpy的区别
memmove 和 memcpy的区别
c语言 内存区域 i++ 库函数 -
strcpy、memcpy和memmove的区别和实现
strcpy、memcpy和memmove的区别和实现
strcpy memcpy memmove