上嵌学习笔记

自己写一个memcpy函数

2017-03-04  本文已影响381人  明白已晚

面试中如问到memcpy的实现,那就要小心了,这里有陷阱。
主要是内存重叠问题,和char *转换问题
强制转换为char型指针,内存就知道如何移动

void* Memcpy(void* dst, const void* src, size_t count)
{
    char *pdst = (char*)dst;
    char *psrc = (char*)src;
    if (NULL == dst&&NULL == src)
    {
        return NULL;
    }
    if ( pdst>psrc && pdst<  psrc + count)//从后往前复制
    {
        pdst = pdst + count-1;
        psrc = psrc + count-1;
        while (count--)
        {
            *pdst-- = *psrc--;
        }
    }
    else
    {
        for (size_t i=0; i < count;i++)
        {
            *pdst++ = *psrc++;
        }
    }
    return dst;

}

strcpy防止内存重叠

      char str[100] = { 0 };
    strncpy(str, "abcdefghi", 100 - 1);
    cout << str << endl;
    char szTemp[100] = { 0 };
    strncpy(szTemp, str, sizeof(szTemp) - 1);
    strcpy(str + 2, szTemp);  // 这里是示意, 防止越界啊  
    cout << str << endl;
    return 0;

主要是内存重叠,解决方法,反向拷贝。

上一篇下一篇

猜你喜欢

热点阅读