手撕memcpy

memcpy函数是c和c++使用的内存拷贝函数,函数原型是:

void *memcpy(void*dest, const void *src, size_t n);

表示由src指向地址为起始地址的连续n个字节的数据复制到以dest指向地址为起始地址的空间内。

与strcpy相比,memcpy并不是遇到'\0'就结束,而是一定会拷贝完n个字节。

注意事项:对于地址重叠的情况,上述函数的行为是未定义的,因此要考虑到此问题

要点:void*类型的指针不能运算,必须强转

​ 必须要考虑内存重叠问题(画个图自然就明白了!)

void * my_memcpy(void *dst, const void *src, size_t count){
    if(dst==nullptr||src==nullptr){
        return nullptr;
    }
    char* temp_dst=(char*)dst;
    char* temp_src=(char*)src;
    if(temp_dst>temp_src&&temp_dst<temp_src+count ){
        //有内存重叠的情况
           temp_dst=temp_dst+count-1;
        temp_src=temp_src+count-1;
        while(count--){
            *temp_dst--=*temp_src--;
        }
    }else{
        //没有内存重叠的情况
         while(count--){
            *temp_dst++=*temp_src++;
        }
    }
    return (void *)dst;
}  

目录

暂无目录

评论区 0