码迷,mamicode.com
首页 > 其他好文 > 详细

memmove 的实现

时间:2014-09-21 16:06:40      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:des   style   color   ar   for   sp   问题   on   c   

baidu的笔试题目

用C语言实现一个公用库函数void * memmove(void *dest,const void *src,size_t n)。
该函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。
注意,作为公用库函数,请注意安全检查,注意处理内存区重合的情况。

void*  memmove(void *dest, const void *src,size_t n) 

    if (n == 0) 
    { 
        return 0; 
    }


    /* 验证参数 */ 
    if (dest == NULL)  return 0; 
    if (src == NULL)    return 0;


    char *psrc = (char*)src; 
    char *pdest = (char*)dest;


      /*检查是否有重叠问题 */ 
    if((dest <= psrc) || (pdest >= psrc + n)) 
        { 
                /*正向拷贝*/ 
                for(int i=0; i < n; i++) 
                { 
                        *pdest = *psrc; 
                        psrc++; 
                        pdest++; 
                } 
        } 
        else 
        { 
                /*反向拷贝*/ 
                psrc += n; 
                pdest += n; 
                for(int i=0;i<n;i++) 
                { 
                        psrc--; 
                        pdest--; 
                        *pdest = *psrc;


                } 
        } 

    return dest;

memmove 的实现

标签:des   style   color   ar   for   sp   问题   on   c   

原文地址:http://www.cnblogs.com/ransw/p/3984458.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!