使用memmove代替memcpy的示例

时间:2014-02-23 20:59:35

标签: c memcpy memmove

差异: 如果存在重叠,请使用memmove代替memcpy

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

这是一个:

// 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函数都要求参数不重叠。