用C语言实现一个公用库函数void * memmove(void *dest,const void *src,size_t n)。
该函数的功能是拷贝src所指的内存内容前n个字节到dest所指的地址上。

注意,作为公用库函数,请注意安全检查,注意处理内存区重合的情况。

memmove和memcpy的区别在于memcpy当存在重合的区域时,要进行报错或者其他处理。。。

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

用C语言实现一个公用库函数void * memmove(void *dest,const void *src,size_t n)的更多相关文章

  1. void *memmove( void* dest, const void* src, size_t count );数据拷贝,不需要CPU帮助

    分享到 腾讯微博 QQ空间 新浪微博 人人网 朋友网 memmove 编辑词条 编辑词条 -->   memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,m ...

  2. c语言实现一个链表

    一.基础研究 我们在这里要理解和实现一种最基本的数据结构:链表.首先看看实现的程序代码: List .h: 事实上我们观察list.h发现前面一部分是数据结构的定义和函数的声明,后面一部分是函数的实现 ...

  3. code与const void*指针

    关于指针: 当定义int *p时,它也会在内存中给指针变量p分配一个内存单元,假设这个单元在内存的编址为0x1003:此时,0x1003中的值是不确定的,(因为我们没有给指针赋值),当编译器遇到了p= ...

  4. 自己用c语言实现字符串处理库函数以及扩展

    1.实现基本的c语言库函数: int myStrlen( const char* str);//根据传入的字符串首地址获取字符串长度:返回值为长度 int myStrlen(const char* s ...

  5. C语言字符串操作常用库函数

    C语言字符串操作常用库函数 *********************************************************************************** 函数 ...

  6. (转)如何学好C语言,一个成功人士的心得!

    zidier111发表于 2013-1-26 08:59:05   今 天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所 ...

  7. 怎样学好C语言,一个成功人士的心得!

    今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了全部的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的 ...

  8. 用C语言写一个“事件”的模拟程序

    源:用C语言写一个“事件”的模拟程序 Example.c //定义一个函数指针 func int (*func) (void); //调用该函数相当于触发了事件. //该事件触发后,会检查函数指针fu ...

  9. 实战项目开发细节:C语言分离一个16进制数取出相应的位1或0

    最近在公司开发一个关于钢琴的PCBA项目,项目大概是这样的,完成各种功能的测试,准备去工厂量产的时候可以通过软件快速甄别硬件是否短路,断路等问题. 其中,甄别好坏的方法是通过比如按键,或者其它的操作然 ...

随机推荐

  1. IImage--factory

    <?php /* 实例4 */ /* 使用工厂类解析图像工作 */ interface IImage { function getWidth(); function getHeight(); f ...

  2. 通过套接字(socket)和UDP协议实现网络通信

    UDP---用户数据报协议,是一个简单的面向数据报的运输层协议.(无连接.封包.大小限制.速度快). 一.UDP协议的特点: 将数据及源和目的地封装成数据包中,不需要建立连接. 每个数据报的大小限制在 ...

  3. jQuery图片水平滑动延迟加载动画

    在线演示 本地下载

  4. <再看TCP/IP第一卷>TCP/IP协议族中的最压轴戏----TCP协议及细节

    题外话:刚刚过去的半个月实在是忙得我喘不过来气,虽然手里还压着几个项目得在期末考试之前做完,但是想想还是更新一下随笔,稍微换个心情.另外小吐槽一下那些在博客园里原封不动抄书当随笔的人,唉真是....算 ...

  5. SiteServer CMS 5.0 源码入门

    开发者中心 STL 语言 文 档 博 客 论 坛 Github 二次开发 提示:文档中心正在完善中,我们将不断发布新文档,敬请期待...   新手入门 SiteServer CMS 能做什么 Site ...

  6. 算法(Algorithms)第4版 练习 1.5.4

    代码实现: package com.qiusongde; import edu.princeton.cs.algs4.StdIn; import edu.princeton.cs.algs4.StdO ...

  7. error: reference to 'max' is ambiguous

    1.     自定义的变量名    与      库中的      重名了

  8. Linux下system函数

    http://www.jb51.net/article/40517.htm   浅析如何在c语言中调用Linux脚本 http://blog.csdn.net/koches/article/detai ...

  9. python基础-条件语句if

    if语句: if 判断条件: 执行语句 else: 执行语句 flag = Falsename = 'huipaodexiong'if name == 'python':    flag = True ...

  10. JavaUtil_09_通用工具类-01_Hutool

    一.重要的官方资料 1. Hutool 官网 2. Hutool 参考文档 3. Hutool API文档