memmove詳解與模擬實現

2021-10-09 07:42:59 字數 809 閱讀 1936

原型:

void* memmove(void* dest,const void* src,size_t size)

//size的單位:位元組

功能:從src的位置開始,向後拷貝size個位元組的資料到dest的位置。功能與memcpy相同,但有以下幾點這注意:

1.memmove與memcpy不同之處在於,memmove處理的源記憶體塊和目標記憶體塊是可以重疊的;

2.若出現源空間與目標空間重疊的情況,要使用memmove函式進行處理。

若出現上述**的第二種情況,則需要在是實現時將拷貝的順序變為從後向前拷貝,以避免出現前邊拷貝的內容被後邊拷貝的內容覆蓋,導致**執行結果達不到預期。

void* my_memmove(void* dest,const void* src,size_t size)

}//其他便與memcpy一樣,處理記憶體不重疊的情況

else

}return (ret);

}

測試結果

int main()

測試截圖

模擬實現memmove

這就是之前我所說到的,memcpy的乙個函式漏洞,他庫函式本身就不能避免這個漏洞,所以在進行模仿的時候雖然發現了這個問題但是還是沒有將這個問題彌補,因為有讓你彌補的地方,那就是來模仿這個 memmove 函式。再給大家來說一下memcpy函式的漏洞是哪個,就是上圖這樣,如果你開始將原始區域的內容複製...

模擬實現memmove函式

memmove函式也是從源src 拷貝n個位元組到目的 dst 中。與memcpy不同的是,memmove會考慮記憶體重疊問題,會對兩記憶體的位置進行判斷,從而考慮是從前往後拷貝或是從後往前拷貝。記憶體中的位置關係可以分為以下四種,而前三種又能統一劃分到一組,因為在這種情況下,從前往後拷貝時,拷貝過...

模擬實現memmove函式

int arr 6 將陣列前4個元素複製到後4個元素上,即將陣列變為 將陣列還原為初始在將後四個元素複製到三個元素上,即為 void my memcpy void dest,void src,size t count return ret int main memcpy arr 2,arr,16 將...