美文网首页上嵌学习笔记
自己写一个memcpy函数

自己写一个memcpy函数

作者: 明白已晚 | 来源:发表于2017-03-04 16:16 被阅读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;
    

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

    相关文章

      网友评论

      本文标题:自己写一个memcpy函数

      本文链接:https://www.haomeiwen.com/subject/pmadgttx.html