C语言基础之strcpy()和memcpy()

1.strcpy函数

   函数原型:

char *strcpy(char *dest, const char *src)
{
    char *tmp = dest;
    while((*dest++ = *src++) != '\0');
    return tmp;
}
功能:实现字符串的拷贝
参数:@dest            保存拷贝后的字符串(目的串)
          @src              要拷贝的字符串(原串)
返回值:成功返回目的串的首地址

缺点:没有检查传入的参数是否为空

改进后的strcpy函数

char *strcpy(char *dst, const char *src)     
{  
    if((dst==NULL) || (src==NULL))  
        return NULL;   
    char *tmp = dst; 
    while ((*dst++ = *src++) != '\0');
    return tmp;
}  

2.memcpy函数

   函数原型:

void *memcpy(void *dest, const void *src, size_t count)
{
    char *tmp = dest;
    const char *s = src;
    while(count--)
        *tmp++ = *s++;
    return dest;
}
功能:实现内存的拷贝
参数:@dest            保存拷贝后的内存(目的内存)
         @src           要拷贝的内存(原内存)
          @count         要拷贝内存的字节数
返回值:成功返回拷贝后的内存首地址

缺点:没有考虑内存重叠的问题

改进的memcpy函数

void *memory(void *dst,const void *src,size_t count)  
{  
    const char *psrc = static_cast<const char*>(src);  
    char *pdst = static_cast<char*>(dst);  
  
    if(psrc==NULL || pdst==NULL)  
        return NULL;  
  
    if(pdst>psrc && pdst<(psrc+count))  
    {  
        for(size_t i=count-1; i!=-1; i--)  //从后往前拷贝
            pdst[i] = psrc[i];  
    }  
    else  
    {  
        for(size_t i=0; i<count; ++i)  //从前往后拷贝
            pdst[i] = psrc[i];  
    }  
    return dst;  
}  


3.strcpy函数和memcpy函数的区别

   (1)strcpy遇到'\0'会结束拷贝,而memcpy函数不会结束,并且一定会复制完count个字节

   (2)memcpy要考虑内存重叠的问题,并且拷贝的时候存在内存覆盖的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值