美文网首页上嵌学习笔记
自己写一个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函数

    面试中如问到memcpy的实现,那就要小心了,这里有陷阱。主要是内存重叠问题,和char *转换问题强制转换为ch...

  • 2018-05-17 pat1028

    更深入了学习了strcmp() 函数 学到了一个新的函数,也就是memcpy()。函数原型 void memcpy...

  • 数组拷贝函数

    memcpy 函数原型:void *memcpy(void *dest, const void *src, siz...

  • memcpy

    memcpy指的是c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝...

  • 个人笔记 - Memcpy

    1.定义 memcpy指的是c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位...

  • memcpy与memmove的区别

    memcpy和memmove都是C语言的库函数,相比于strcpy和strncpy只能拷贝字符串数组,memcpy...

  • memcpy memmove 函数

    memcpy函数 函数原型 功能:由src指向地址为起始地址的连续 size个字节的数据复制到以dest指向地址为...

  • 事后诸葛亮之自实现 memcpy 函数

    今天去面试了让我手写一个 memcpy 函数,毕竟简历写的精通C/C++ ,然后我就写了一个 后边不知道怎么写了 ...

  • C语言之memcpy()函数用法

    函数原型 void *memcpy(void*dest, const void *src, size_t n...

  • 总结:头文件cstring函数的用法(original)

    一.复制类(cpy) (1)memcpy 函数原型: 用法:可与用于转移数据 (2)memmove 函数原型: 基...

网友评论

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

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