实现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 }

 

posted @ 2015-05-29 15:52  dupuleng  阅读(1742)  评论(0编辑  收藏  举报