模擬實現memmove函式

2021-08-10 21:48:13 字數 655 閱讀 2235

memmove函式也是從源src 拷貝n個位元組到目的 dst 中。

與memcpy不同的是,memmove會考慮記憶體重疊問題,會對兩記憶體的位置進行判斷,從而考慮是從前往後拷貝或是從後往前拷貝。

記憶體中的位置關係可以分為以下四種,而前三種又能統一劃分到一組,因為在這種情況下,從前往後拷貝時,拷貝過程中目的記憶體不會覆蓋掉即將要拷貝的源記憶體。

第四種關係中,如果我們按照傳統的方式從前往後拷貝時,可能會出現源串被剛剛拷貝的目的串覆蓋的情況,從而不能達到預期的結果,因此,在這種特殊的情況下,我們應該從後往前拷貝,這樣就很好的避免了上述問題。

函式實現:

void *my_memmove(void *dst, const void *src, int

count)

}else

}return ret;

}

測試用例:

模擬實現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 將...

模擬實現memmove

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

memmove庫函式模擬實現

第一次嘗試 include include void mymemmove void destin,const void source,size t num char sour char source char dest char destin if dest sour dest sour num e...