[英]Example of using memmove in place of memcpy
區別:如果存在重疊,請使用memmove
代替memcpy
問:您能否提供任何發生重疊的C lib函數的實際情況,以便使用memmove代替memcpy
?
例如,您需要在數組中間(就地)插入一個元素。 這需要將元素從插入點向前移動一個位置。 這可以通過memmove()
完成,但不能通過memcpy()
。
這是一個:
// 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函數要求參數不重疊,因此很難找到它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.