c 模擬實現memmove

2021-10-03 19:35:07 字數 787 閱讀 5863

memmove 是乙個記憶體操作函式,不是字串操作函式,它可以處理多種型別的資料。

它的原型是:

void memmove( void dest, const void src, size_t count );*

注意:

1、它的返回值是void*,引數型別也是void*,這樣它才可以處理不同型別的資料。

2、目標dest不能加const,源src加const。原因是我們需要從源src中拷貝資料到dest中,需要對dest進行賦值。若用const保護 dest,便不能完成賦值操作。

memmove的好處是可以處理dest與src發生記憶體重疊的情況,具體自行查閱資料。

**:

#include

#include

#includevoid *my_memmove(void dest,const void src,int n)

}else >//當出現記憶體覆蓋時從後向前拷貝

}return dest;

}int main() ;

my_memmove(arr+2,arr,4);

my_memmove(arr1,arr0,4);

printf(「記憶體覆蓋情況:%s\n」,arr+2);

printf(「正常情況:%s\n」,arr1);

system(「pause」);

return 0;

}

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