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;
}
发布了100 篇原创文章 · 获赞 26 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/modi000/article/details/105305731