码迷,mamicode.com
首页 > 其他好文 > 详细

Strcpy函数的实现

时间:2017-09-14 16:59:41      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:处理   pre   style   拷贝   size_t   函数   return   oid   实现   

(1)strcpy函数没有处理内存重叠的情况,所以内存重叠时使用这个函数会让程序崩溃

函数原型为:

char * strcopy(char *dst, char *src, int n)

{

  char *addr = dst;

  assert((dst != NULL) && (src != NULL) );

  while((*dst++ = *src++) != ‘\0‘)

  NULL;

  return addr ;

}

(2)memcpy也没有考虑到内存重叠

void *memcpy(void *dst, void *source, int count)

{

  char *tmp_dest = (char *)dest;
  char *tmp_source = (char *)source;

  assert((dst != NULL) & (src != NULL));

  while(count--)

  {

    *tmp_dest ++ = *tmp_source ++;

  }

  return dest;

}

(3)memmove考虑到了内存重叠的情况

 1 void *memmove(void *dest, const void *source, size_t count)
 2 {
 3   assert((NULL != dest) && (NULL != source));
 4   char *tmp_source, *tmp_dest;
 5   tmp_source = (char *)source;
 6   tmp_dest = (char *)dest;
7   if((dest + count < source) || (source + count) < dest)) 8   {  // 如果没有重叠区域 9     while(count--) 10     *tmp_dest++ = *tmp_source++; 11   } 12   else 13   { //如果有重叠(反向拷贝) 14     tmp_source += count - 1; 15     tmp_dest += count - 1; 16     while(count--) 17       *--tmp_dest = *--tmp; 18   } 19     return dest; 20 }

 

Strcpy函数的实现

标签:处理   pre   style   拷贝   size_t   函数   return   oid   实现   

原文地址:http://www.cnblogs.com/Deanboy/p/7520616.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!