zoukankan      html  css  js  c++  java
  • strcpy,memcpy,memset函数实现

     strcpy 实现,只能拷贝字符串

    char* strcpy(char* des,const char* source)
    {
      char* r=des;  
    assert((des != NULL) && (source != NULL));
     while((*des++ = *source++)!='');
     return r;
    }

    memcpy 实现,注意目的地址和源地址重合的情况,以及强制类型转换

    void *myMemCopy(void *dest,const void *src,size_t count)
    {
        char *pDest=(char *)(dest);
        const char *pSrc=(const char *)(src);
    
        //目的地址和源地址重叠,从源地址的末尾方向开始拷贝
         if( pDest>pSrc && pDest<pSrc+count )
        {
            pDest = pDest + count-1;
            pSrc = pSrc + count-1;
            while(count--){
                *pDest-- = *pSrc--;
            }
        }
        //目的地址和源地址不重叠,从源地址的开始方向拷贝
        else
        {
            while(count--){
                 *pDest++ = *pSrc++;
            }
        }
    
        return pDest;
    }

    memset函数

    memset()的函数, 它可以一字节一字节地把整个数组设置为一个指定的值。

    memset()函数在mem.h头文件中声明,它把数组的起始地址作为其第一个参数

    void* memset(void* s, int c, size_t n)
    {
    assert(str != NULL);    
    unsigned char* p = (unsigned char*) s;
        while (n > 0) {
        *p++ = (unsigned char) c;
        --n;
        }
        return s;
    }
  • 相关阅读:
    Vmware安装Ubuntu ==> 连网成功
    在 ns3.25中添加 plc(电力线载波) 模块
    Ubuntu12.04下安ns3.29及Ubuntu换源方法
    微信支付小程序版
    微信小程序打开外部链接
    linux下安装Mongodb
    延迟执行+异步 之代码分析1
    Vue入门
    实验一
    实验二
  • 原文地址:https://www.cnblogs.com/NeilZhang/p/6368368.html
Copyright © 2011-2022 走看看