簡體   English   中英

使用memmove代替memcpy的示例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM