自我实现strcpy,memcpy函数

[cpp] view plaincopy

  1. // 字符串处理函数.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include <iostream>  
  6. using namespace std;  
  7. //编程实现strcpy  
  8. char* strcpy(char* strDest,const char *strSrc){  
  9.    if (strDest==NULL||strSrc==NULL)  
  10.    {  
  11.        return NULL;  
  12.    }  
  13.    char *temp=strDest;  
  14.    while ((*strDest++=*strSrc++)!='\0');  
  15.    return temp;  
  16. }  
  17.   
  18. int getlen(const char *str){  
  19. int len=0;//保存长度  
  20. while (*str++!='\0')  
  21. {  
  22.     len++;  
  23. }  
  24. return len;  
  25. }  
  26.   
  27.   
  28. //  
  29. //编程实现memcpy,考虑地址重叠情况  
  30. void *memcpy(void *memTo,const void *memFrom,size_t size){  
  31.   
  32.     if ((memTo==NULL)||(memFrom==NULL))  
  33.     {  
  34.         return NULL;  
  35.     }  
  36.     char* temp=(char*)memTo; //保存memFrom首地址  
  37.     const char* tempFrom=(const char*)memFrom; //保存memTo首地址  
  38.     if (temp>tempFrom && temp<tempFrom+size) //如果有地址重叠  
  39.     {  
  40.         for (int t=size-1;t>=0;--t)  
  41.         {  
  42.             temp[t]=tempFrom[t];  
  43.         }  
  44.     }  
  45.     else{  
  46.         for (int t=0;t<size;++t)  
  47.         {  
  48.             temp[t]=tempFrom[t];  
  49.         }  
  50.     }  
  51.     return temp;  
  52. }  
  53. int _tmain(int argc, _TCHAR* argv[])  
  54. {  
  55.     char strSrc[20]="abcdefgl";  
  56.     char strDest[20];  
  57.     int len=0;  
  58.   
  59.     len=getlen(strcpy(strDest,strSrc));  
  60.     memcpy(strSrc+2,strSrc+1,4);  
  61.     strSrc[2+4]='\0';  
  62.     cout<<strDest<<endl;  
  63.     cout<<len<<endl;  
  64.     cout<<strSrc+2<<endl;  
  65.     system("pause");  
  66.     return 0;  
  67. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值