strcpy函数

http://www.cnblogs.com/chenyg32/p/3739564.html

char * strcpy(char* dst, const char *src)
{
     assert(dst!=NULL && src != NULL);
    
    char *res = dst;
    while((*dst++ = *src++)!='\0');

    return res;
}

  

重点笔记:

1. src 使用 const 修饰,保护原变量;

2. 参数判空,保护程序;

3. 返回目标字符串地址;

4. 谨记字符串末尾的结束符 '\0';

5. 考虑内存重叠??????

 

内存重叠的拷贝函数:

char *strcpy(char *dst, const char*src)
{    
      assert(dst!=NULL && src!=NULL);
       char *ret = dst;
       my_memcpy(dst, src, strlen(src)+1);//重点:一定要长度+1,拷贝进去'\0'
        return ret;
}

char * my_memcpy(char *dst, const char* src, int cnt)
{
        assert(dst!=NULL && src != NULL && cnt>0);
        char * ret = dst;
        
        if (dst>=src && dst<=src+cnt-1)
        {
            dst = dst+cnt-1;
            src = src+cnt-1;
            while(cnt--)
            {
                *dst-- = *src--;
            }
        }
        else
        {
            while(cnt--)
                *dst++ = *src++;
        }
        return ret;
}

 

首先检测是否有重叠区域,若有的话从后往前赋值内容;否则正常从前往后赋值内容;

特别注意的是,当调用上述 my_memcpy 接口时谨记传入的字符串长度要包括末尾的'\0'字符

 

posted @ 2017-07-22 22:14  糯米米一粒  阅读(148)  评论(0编辑  收藏  举报