zoukankan      html  css  js  c++  java
  • memcpy与memmove

    函数原型:

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

    头文件:

    #include<string.h>
    

    引入:

      字符串由''结尾,所以字符串内部不能包含任何''字符(''的ASCII值为0),否则我们将读不到''后的字符内容。但是,非字符串内部包含零值的情况并不罕见,我们无法利于其它字符串函数来处理这类数据。所以,我们要引入内存操作的函数来处理。

      memcpy

    memcpy函数是从src的起始位置复制count个字节到dst内存的起始位置。

    我们可以利用这种方法复制任何类型的数值,但是,如果src和dst以任何形式出现了重叠,它的结果就是未定义的。所以,有内存重叠的情况时,我们要避免使用memcpy函数。

    //模拟memcpy源码实现  
    void* my_memcpy(void *dst, void *src, size_t count)  
    {  
        assert(dst);     //这里最好检测一下源和目的的合法性
        assert(src);  
        char *dest = (char *)dst;    //以字节为单位进行复制
        char *str = (char *)src;  
        while (count--)  
        {  
            *dest++ = *str++;  
        }  
        return dst;  
    }  
    

      memmove

    memmove函数和memcpy函数差不多,只是它的源和目标操作数可以重叠。

    //模拟memmove源码实现  
    void* my_memove(void *dst, void *src, size_t count)  
    {  
               assert(dst);  
               assert(src);  
               char *dest = (char *)dst;  
               char *str = (char *)src;  
    
               if ((dest > str) && (dest < str + count))  
               {    // 内存重叠,从后往前拷贝
                 dest = dest + count - 1;  
                 src  = src + count - 1;  
      
                 while (count--)   
                 {  
                    *dest-- = *str--;  
                  }  
               }  
               else  
               {  //内存不重叠,相当于memcpy
                        while (count--)  
                        {  
                                  *dest++ = *str++;  
                        }  
               }  
               return dst;  
    }  
    

      

  • 相关阅读:
    UIAutomation识别UI元素
    pycharm调试bug Process finished with exit code 1073740791 (0xC0000409)
    adb常用命令
    win10 安装Pytorch GPU版+CUDA+cuDNN
    AD 端口相关
    sqlserver数据库排序规则
    sqlserver数据库备份的存储过程
    专有软件不是唯一!试试54款开源服务器软件[转]
    AD管理维护与排错工具
    LDAP over SSL (LDAPS) Certificate
  • 原文地址:https://www.cnblogs.com/Lynn-Zhang/p/5595304.html
Copyright © 2011-2022 走看看