zoukankan      html  css  js  c++  java
  • C语言标准库函数memcpy和memmove的区别以及内存重叠问题处理

    ①memcpy()和memmove()都是C语言中的标准库函数,定义在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:

    void *memcpy(void *dst, const void *src, size_t count);
    void *memmove(void *dst, const void *src, size_t count);

    他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。

    ②内存重叠有以下两种情况

    ③memcpy()和memmove()实现

    void* memcpy(void* dst, const void* src, size_t n)
    {
        char* dstPtr = (char*)dst;
        char* srcPtr = (char*)src;
    
        if((dstPtr != NULL) && (srcPtr != NULL) && (n > 0))
        {
            while(n--)
            {
                *dstPtr++ = *srcPtr++;
            }
        }
    
        return dst;  
    }
    void* memmove(void* dst, const void* src, size_t n)
    {
        char* dstPtr = (char*)dst;
        char* srcPtr = (char*)src;
        
        if((dstPtr != NULL) && (srcPtr != NULL) && (n > 0))
        {
            if((srcPtr < dstPtr) && (dstPtr < (srcPtr + n)))
            {
                do
                {
                    *(dstPtr + n - 1) = *(srcPtr + n - 1);
                }while(--n);
            }
            else
            {
                while(n--)
                {
                    *dstPtr++ = *srcPtr++;
                }
            }
        }
        
        return dst;  
    }
  • 相关阅读:
    进程 之二
    进程
    VIM
    Linux
    编码
    Maven
    Java
    Java
    Java
    其他
  • 原文地址:https://www.cnblogs.com/wulei0630/p/8631206.html
Copyright © 2011-2022 走看看