【问题标题】:Example of using memmove in place of memcpy使用 memmove 代替 memcpy 的示例
【发布时间】:2014-02-23 20:59:35
【问题描述】:

区别: 如果有重叠,请使用memmove 代替memcpy

问:您能否提供任何 C lib 函数发生重叠的实际场景,因此使用 memmove 代替 memcpy

【问题讨论】:

    标签: c memcpy memmove


    【解决方案1】:

    这是一个:

    // len => array length, idx => index where we want to remove
    void removeAt(int* array, size_t* len, size_t idx)
    {
        // copy next values to replace current
        // example: {1, 2, 3, 4} => {1, 3, 4}
        //              ^ remove
        memmove(&array[idx], &array[idx+1], (--(*len) - idx) * sizeof(int));
    }
    

    编辑:关于这出现在 C stdlib 函数的实现中,这会有点难以找到,因为每个实现都可以做自己的事情, 大多数 stdlib 函数要求参数不重叠。

    【讨论】:

      【解决方案2】:

      例如,您需要在数组中间插入一个元素(就地)。这需要将元素从插入点向前移动一个位置。这可以使用memmove() 完成,但不能使用memcpy()

      【讨论】:

      • 这是一个可接受的一般场景,但您还记得库函数中的任何内容吗?
      • @codeymodey:浏览一下code.ohloh.net/…——那里有很多真实的例子。
      • @codeymodey:这是来自 Linux 内核的示例:code.ohloh.net/…
      猜你喜欢
      • 2011-05-23
      • 1970-01-01
      • 2016-06-09
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 1970-01-01
      • 2015-04-21
      相关资源
      最近更新 更多