实现memmove函数
题目:用C语言实现函数void *memmove(void *dest, const void *src, size_t n)。memmove函数的功能死拷贝src所指向内存内容前n个字节到dest所指的地址上。
由于数据类型不确定,因此以字符为单位进行拷贝,这是因为字符可以扩展为任何一种数据类型,且每一种数据类型大小都是字符大小的倍数。
为防止拷贝出错,需要注意以下几个问题
(1)当源内存的首地址等于目标内存的首地址时,不进行任何拷贝
(2)当源内存的首地址大于目标内存的首地址时,实行正向拷贝,即从src拷贝到src + count
(3)当源内存的首地址小于目标内存的首地址时,实行反向拷贝,即从src+count反向拷贝到src
1 void *my_memmove( void *dest , const void *src , size_t count) 2 { 3 // check parameter 4 if(0 == count) return NULL; 5 if(NULL == dest || NULL == src ) return NULL; 6 char *dest_ ; 7 char *src_ ; 8 if(dest < src ) 9 { 10 dest_ =(char*) dest; src_ = (char*)src; 11 while( count-- ) 12 { 13 14 *dest_++ = *src_++; 15 16 } 17 } 18 else if( dest > src ) 19 { 20 dest_ = (char*)dest + count; 21 src_ = (char*)src + count; 22 while(count -- ) 23 { 24 *--dest_ = *--src_; 25 } 26 } 27 28 return dest; 29 }