⽬录:
1. memcpy使⽤和模拟实现
2. memmove使⽤和模拟实现
3. memset函数的使⽤
4. memcmp函数的使⽤
//1.2他们函数返回的是初始地址,使用时注意包含头文件<string.h>
1. memcpy使⽤和模拟实现
//memcpy————>可以理解为momory+copy-------->就是内存拷贝(相比较strcpy,它是只能拷贝字符串,局限性大。)
1 void * memcpy ( void * destination, const void * source, size_t num );
• 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。
• 这个函数在遇到 '\0' 的时候并不会停下来。
• 如果source和destination有任何的重叠,复制的结果都是未定义的。
那重叠的怎么办呢?
-------->这就要用到我们的momcpy函数啦!
1 void * memmove ( void * destination, const void * source, size_t num );
• 和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。
接下来就是mommove的模拟和实现了:
也许会有靓仔会有疑问:这个else里面写的是啥东西,看不懂啊,帖子?
别急,小帖接下来跟你仔细的解答:
我们使用my_mommove模拟应对重叠情况时:
需要考虑两种情况:1.src<dest 2.src>dest
对于第一种:如图一(将红色方框里面的数字移动到蓝色方框里面去),我们先要移动5再移动4再依次移动3,2,1(即从后往前移动)
为什么这样移动呢?
接下来看仔细了,别分心:假设是1,2,3,4,5的移动则里面的数字会变化变为:12145678910,再移动的话就会变为12125678910往后依次是12121678910,12121278910,121212178910,由此可知从前往后行不通,应为从第三项开始就变化了(1 2这两个数覆盖了原来的3 4)
第二种:原理同上(小铁,就偷一下懒啦!希望大家能够体谅,5啊)
memset的使用
格式:void * memset ( void * ptr, int value, size_t num );
memcmp函数的使⽤
1 int memcmp ( const void * ptr1, const void * ptr2, size_t num );
• ⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节
//上式是将arr1与arr2比较:
如果arr1>arr2则返回大于零的数,arr1<arr2返回小于零的数,相等的时候返回零