關於memcpy和memmove的一點說明

2022-07-26 14:42:15 字數 1246 閱讀 7673

今天看到書上降到memcpy和memmove的區別才突然

發現原來兩者之間有如此區別,以前只知道這兩個函式是

實現同樣的功能,沒有接觸到其不同。

memcpy和memmove在msdn的定義如下:

從兩者的宣告來看的確沒有區別,我們來看這樣乙個例子

當我們需要將char* src="abcde"這個字串全部copy到dest中

然而src與dest在記憶體中大概是這樣存在的:

記憶體位址   低------>高

1

src dest21

2345

63 [ a ][ b ][ c ][ d ][ e ][ '

\0' ][ ][ ][ ][ ][ ][ ][ ]

src位址為記憶體1,目的位址為記憶體2

此時很明顯記憶體出現了重疊,當我們拷貝字元a到第三個記憶體位置的時

a將覆蓋src記憶體中的第三個字元 這種情況在memcpy未定義然而memmove

卻給出了正確的處理方式

解決方法,試想當我們先將dest位址移動dest+n-1同時src位址移動src+n-1

這樣再從src的最後乙個元素開

始逐個向前拷貝到dest中就完美的避免了記憶體

重疊導致的元素覆蓋問題呢

下面我們根據memcpy和memmove給出自己的實現:

1 #include 2

using

namespace

std;34

void *memcopy( void *dest, const

void *src, size_t count )518

19return

dest;20}

2122

void *memmove(void *dest,const

void *src,size_t count )

2338}39

else

4049}50

5152

53return

dest;54}

5556

5758

void

main()

59

執行截圖:

關於memcpy函式

一朋友問我memcpy如何寫?初時感到愕然,c庫中不是有嗎?後來才知道原來是某公司考題。檢視了一下要求,呵呵,要求的已經不是原來的memcpy函式了。嘗試寫出,歡迎高手拍磚 define n 4 pragma pack n void memcpyy void dest,const void src,...

關於memcpy 的實現

關於memcpy的實現很多同學可能一開始有和我一樣的想法,就是將src的內容乙個位元組乙個位元組的複製到dest中。這樣實現方法未嘗不可,但是我們都知道cpu每次取存記憶體中的資料時,是按照位址匯流排大小來訪問的。以32位的cpu為例子,cpu每次訪問資料都是一次4個位元組 32位 為最小單位訪問的...

strcpy strncpy和memcpy的區別

strcpy和 memcpy 都是標準 c庫函式,它們有下面的特點。strcpy和 memcpy 主要有以下 3方面的區別。1 複製的內容不同。strcpy 只能複製字串,而 memcpy 可以複製任意內容,例如字元陣列 整型 結構體 類等。2 複製的方法不同。strcpy 不需要指定長度,它遇到被...