2020-09-04 memcpy函數(shù)實現(xiàn)

#include <stdio.h>

/**
    memcpy函數(shù)實現(xiàn)
    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中間,有內(nèi)存重疊
    // 為了防止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;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容