每日一題——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;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章