c语言中strcpy和memcpy函数的实现

前文已经提到过,这里再详细的分析一下:

strcpy,仅适用于字符串的复制+无法决定复制的长度,只能到‘\0’才结束,所以容易越限。

memcpy,范围更广,不仅适用于字符串,还有其他的数据类型+能决定复制的长度。

1、strcpy()函数实现

并没有对越限的情况进行处理,所以如果越限了会造成不可知的错误。

char* strcpy(char* dest, const char* src) 
{
    if(dest==NULL||src==NULL)
        return NULL;
    char* temp = dest;
    for(;src;src++,temp++)
    {
        *temp = *src;
    }
    *temp = '\0';
    //*temp = *src;//上条语句可以写成这样。
    return dest;
}

 以上实现方法还可以简化:

char * strcpy(char * dest, const char * src) 
{
  if ((src == NULL) || (dest == NULL)) 
      return NULL;
  char *strdest = dest;        
  while ((*strDest++ = *strSrc++)!='\0'); 
  return dest;
}

 因为while循环是由多个if +1个else组成的,且最终退出循环是条件不成立的时候,所以最终是将'\0'字符也赋值成功了。

2、memcpy的实现:

void *memcpy(void *memTo, const void *memFrom, size_t size)
{
  if((memTo == NULL) || (memFrom == NULL)) 
         return NULL;
  char *tempFrom = (char *)memFrom;             
  char *tempTo = (char *)memTo;                      
  while(size -- > 0)                
         *tempTo++ = *tempFrom++ ;  
  return memTo;
}

char *ch[128];

struct st{

int mm;

double bb;

}  nn;

nn.mm = 2;

nn.bb = 2.3;

memcpy(ch,(char*)&nn,sizeof(struct st));  //(char*)&nn 是不是用char* 转应该都行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值