2020-09-04 memcpy函数实现

2020-09-04  本文已影响0人  金珉锡_4bc1
#include <stdio.h>

/**
    memcpy函数实现
    void *memcpy(void *str1, const void *str2, size_t n)
    */
void *Memcpy(void *str1, const void *str2, size_t n)
{
    if(str1 == NULL || str2 == NULL || n <= 0){
        return NULL;
    }

    char *pstr1 = (char *)str1;
    char *pstr2 = (char *)str2;

    // 说明str1在str2中间,有内存重叠
    // 为了防止copy时不破坏str2,从后向前拷贝
    if(pstr1 > pstr2 && pstr1 < (pstr2 + n)){
        pstr1 += (n - 1);
        pstr2 += (n - 1);

        while(n--){
            *pstr1-- = *pstr2--;
        }
    }
    else{
        while(n--){
            *pstr1++ = *pstr2++;
        }
    }
}

int main()
{
    char buf1[] = "hello, world!";
    char buf2[100];

    Memcpy(buf2, buf1, 5);

    printf("%s\n", buf2);

    return 0;
}

上一篇下一篇

猜你喜欢

热点阅读