C语言 memcpy函数(增加dst 从第一字节拷贝判断)的内部简单实现方式

来源:互联网 发布:夏易seo 编辑:程序博客网 时间:2024/05/22 03:26

刚学习C语言编程的时候,感觉C内部函数深不可测,通过代码很难实现。后来经常慢慢的学习过程,理解了部分C函数的实现方法,下面简单说下memcpy函数的内部实现方式之一。

简单概括内存拷贝的含义:字节对齐字节进行赋值(比如单个字节对齐单个字节,四个字节对齐四个字节)。

void* MemCpy(void* dest,const void* src,int size)//拷贝函数{    if (NULL == dest || '\0' == *(char*)src || 0 >= size)//判断 dest的地址,如果为空表示没有内存空间储存数据 。判断src是否有值    {        return NULL;    }    char* pdest,* psrc;    pdest = (char*)dest;    psrc = (char*)src;    int nNum = 0;    while ((char)-52 != *(pdest - 1))//进行安全内存判断,如果dest指向的不是常量字符串地址,第一个位置的上一个字节是-52     {        if ((char)-51 == *(pdest - 1))//连续前10字节都是-51的话 ,退出函数执行 (测试这种方法只对CString有效果)        {            nNum++;        }        else        {            nNum = 0;        }        if (10 <=  nNum)        {            return NULL;        }        pdest--;    }    int remdr = size % 4;//单个字节拷贝,    while(remdr--)    {        *pdest++ = *psrc++;    }    int nDin = size / 4;//剩下数据为对齐4字节,采用int 4字节 32位拷贝    while(nDin--)    {        *((int*)pdest) = *((int*)psrc);        pdest += 4;        psrc += 4;    }    return dest;}

有点遗憾,关于const char*参数没有找到有效的判断方法。

1 0
原创粉丝点击