zoukankan      html  css  js  c++  java
  • Strcpy函数的实现

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

    函数原型为:

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

    {

      char *addr = dst;

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

      while((*addr ++ = *src++) != '')

      NULL;

      return dst;

    }

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

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

    {

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

      assert(count < 0);

      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));
        assert(count < 0);
    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_source; 18   } 19     return dest; 20 }
  • 相关阅读:
    1722 最优乘车 1997年NOI全国竞赛
    tarjan算法详解
    codevs 原创抄袭题 5969 [AK]刻录光盘
    Kosaraju算法详解
    1722 最优乘车 未完成
    codevs原创抄袭题 5960 信使
    1405 奶牛的旅行
    android 管理Bitmap内存
    Dynamics CRM 2013 初体验(3):新增加的功能
    在android画面切换时设置跟随变动的小圆圈
  • 原文地址:https://www.cnblogs.com/Deanboy/p/7520616.html
Copyright © 2011-2022 走看看