用C语言实现一个公用库函数void * memmove(void *dest,const void *src,size_t n)

用C语言实现一个公用库函数void * memmove(void *dest,const void *src,size_t n)。
该函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。文章来源地址https://www.yii666.com/article/754020.html文章地址https://www.yii666.com/article/754020.html网址:yii666.com

注意,作为公用库函数,请注意安全检查,注意处理内存区重合的情况。网址:yii666.com<

memmove和memcpy的区别在于memcpy当存在重合的区域时,要进行报错或者其他处理。。。文章来源地址:https://www.yii666.com/article/754020.html

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;
}

版权声明:本文内容来源于网络,版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。文本页已经标记具体来源原文地址,请点击原文查看来源网址,站内文章以及资源内容站长不承诺其正确性,如侵犯了您的权益,请联系站长如有侵权请联系站长,将立刻删除

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信图片_20190322181744_03.jpg

微信扫一扫打赏

请作者喝杯咖啡吧~

支付宝扫一扫领取红包,优惠每天领

二维码1

zhifubaohongbao.png

二维码2

zhifubaohongbao2.png