每日一题——memcpy,strcpy,memmove的实现

memcpy与strcpy的区别:
1,用途不同:strcpy主要用来字符串拷贝,memcpy主要是其他类型的拷贝;
2,使用方式不同:strcpy是遇到‘\0’停止,memcpy是根据第三个参数来决定拷贝内容;

memmove:
原型:void memmove( void dest, const void* src,size_t count );
用途:从src的count个字符拷贝到dest
这里需要注意src与dest的位置关系,从而确定是正向拷贝还是反向拷贝。

实现:

//strcpy
char* strcpy(char* dest,const char* src)
{
    if ((dest == NULL) || (src == NULL))
        return NULL;
    char* strdest = dest;
    while (*src != '\0')
        *strdest++ = *src++;
    return strdest;
}
//memcpy
void* memcpy(void* dest,const void* src,size_t count)
{
    if (dest == NULL || src == NULL)
        return NULL;
    char* tempDest = (char*)dest;
    char* tempSrc = (char*)src;
    while (count--)
        *tempDest++ = *tempSrc++;
    return dest;
}
//memmove
void* Mymemmove(void* dest, void* src,size_t count)
{
    assert(dest != NULL && src != NULL);
    char* mydest = (char*)dest;
    char* mysrc = (char*)src;
    char* ret = (char*)dest;    

    if (mydest <= mysrc || mydest >= mysrc+count)   //正向
    {
        while (count--)
            *mydest++ = *mysrc++;
    }
    else
    {
        mydest += count - 1;
        mysrc += count - 1;
        while (count--)
            *mydest-- == *mysrc--;
    }
    return ret;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值