注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Q超越兔子的蜗牛O--逸云沙鸥Linux

飘飘何所似,天地一沙鸥;落霞与孤鹜齐飞,秋水共长天一色~~

 
 
 

日志

 
 

strcpy()memcpy()memmove()memset()的实现  

2012-09-11 10:28:06|  分类: C++成长记 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

题目:strcpy()memcpy()memmove()memset()的实现。

  1. char *strcpy(char *strDest, const char *strSrc)  
  2. {  
  3.     assert((strDest!=NULL) && (strSrc !=NULL));  //注意检查
  4.     char *address = strDest;  
  5.     while( (*strDest++ = * strSrc++) != '\0')  
  6.         NULL ;  
  7.     return address ;  
  8. }  
  9.   
  10. void *MemCopy(void *dest,const void *src,size_t count)  
  11. {  
  12.     char *pDest=static_cast<char *>(dest);  // 转为char* 类型,进行计数
  13.     const char *pSrc=static_cast<const char *>(src);  
  14.     for(size_t i=0; i<count; ++i)  
  15.     {  
  16.         pDest[i]=pSrc[i];  
  17.     }  
  18.     return pDest;  
  19. }  
  20.   
  21. void *Memmove(void *Dst, const void*Src,size_t count)  
  22. {  
  23.     assert(Dst && Src);  
  24.     void* pDst = Dst;  
  25.     if (Dst>Src && (char*)Dst < (char*)Src + count)  
  26.     {  // 特别注意这种位置交叉的情况,直接移动会覆盖而丢掉部分数据
  27.         Dst = (char*)Dst + count - 1;  
  28.         Src = (char*)Src + count - 1;  
  29.         while(count--)  
  30.         {  
  31.             *(char*)Dst = *(char*)Src;  
  32.             Dst = (char*)Dst -1 ;  
  33.             Src = (char*)Src -1 ;  
  34.         }  
  35.     }  
  36.     else  
  37.     {  // 当两个地址不会相互“干扰”的时候,直接赋值即可
  38.         while(count--)  
  39.         {  
  40.             *(char*)Dst = *(char*)Src;  
  41.             Dst = (char*)Dst + 1;  
  42.             Src = (char*)Src + 1;  
  43.         }  
  44.     }  
  45.     return pDst;  
  46. }  
  47.   
  48. void * Memset(void* buffer, int c, int count)  
  49. {  
  50.     char* pvTo=(char*)buffer;  // 还是注意指针类型转换
  51.     assert(buffer != NULL);  
  52.     while(count-->0)  
  53.         *pvTo++=(char)c;  
  54.     return buffer;  
  55. }  

网络转载请注明:转载自程序员面试之家

并注明本文链接地址: strcpy()memcpy()memmove()memset()的实现

  评论这张
 
阅读(1170)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017