c语言实现memcpy函数 (考虑内存重叠以及指针的强制转换)

#include <stdio.h>
#include <assert.h>

void* my_memcpy(void* dest, const void* src, size_t count)
{
    assert( dest != NULL || src != NULL);
    char* d;
    const char* s;

    //地址重叠
    if(dest > src + count || dest < src)
    {
        d = (char*)dest;
        s = (char*)src;
        while( count-- )
        {
            *d++ = *s++;
        }
    }
    else
    {
        d = (char*) (dest + count -1);
        s = (char*) (src + count -1);
        while( count-- )
        {
            *d-- = *s--;
        }
    }
    return dest;
}

int main()
{
    int buff1[50] = {1,2,3,4,5,6,7,8};
    int buff2[50] = {};
    my_memcpy(buff2,buff1,32);
    for(int i =0 ; i < 8; i++)
    {
        printf("%d\n",buff2[i]);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42205987/article/details/81953009
今日推荐