内存的移动和拷贝

  1. // 功能:由src所指内存区域复制count个字节到dest所指内存区域。  
  2. // 说明:src和dest所指内存区域可以重叠,但复制后dest内容会被更改。函数返回指向dest的指针  
  3. void *memmove(void *dest , const void *src , size_t count)  
  4. {  
  5.     assert( (dest != NULL) && (src != NULL));     //安全检查  
  6.     assert( count > 0 );  
  7.   
  8.     char *psrc = (char *) src;  
  9.     char *pdest = (char *) dest;  
  10.     //检查是否有重叠问题  
  11.     if( pdest < psrc )  
  12.     {  
  13.         //正向拷贝  
  14.         while( count-- )  
  15.             *pdest++ = *psrc++;  
  16.     }  
  17.     else if( psrc < pdest )  
  18.     {  
  19.         //反向拷贝  
  20.         psrc = psrc + count - 1;  
  21.         pdest = pdest + count - 1;  
  22.         while( count-- )  
  23.             *pdest-- = *psrc--;  
  24.     }  
  25.     return dest;  
  26. }  
  27.   
  28. // 功能:由src指向地址为起始地址的连续n个字节的数据复制到以dest指向地址为起始地址的空间内。  
  29. // 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针  
  30. void *memmcpy(void *dest , const void *src , size_t count)  
  31. {  
  32.     assert( (dest != NULL) && (src != NULL));     //安全检查  
  33.     assert( count > 0 );  
  34.   
  35.     char *psrc = (char *) src;  
  36.     char *pdest = (char *) dest;  
  37.     while( count-- )  
  38.         *pdest++ = *psrc++;  
  39.   
  40.     return dest;  
  41. }  
原文地址:https://www.cnblogs.com/zhanglanyun/p/2634559.html