memcpy和memmove的區別

2021-07-04 04:21:17 字數 769 閱讀 1561

emcpy()和memmove()都是c語言中的庫函式,在標頭檔案string.h中,其原型分別如下:

void

*memcpy

(void

*dst,

const

void

*src,

size_t count)

;void

*memmove

(void

*dst,

const

void

*src,

size_t count)

; 它們都是從src所指向的記憶體中複製count個位元組到dst所指記憶體中,並返回dst的值。我們知道他們的位置關係有四種:src在前,dst在後不交叉;src在後,dst在前不交叉;src在前,dst在後有交叉;src在後,dst在前有交叉。對於這四種情況,當源記憶體區域和目標記憶體區域無交叉時,兩者的結果是一樣的,但如果有交叉呢?先看下圖:

圖的上半部分為源記憶體區域在目標記憶體區域右邊,下半部分為源記憶體區域在目標區域左邊,源記憶體區域和目標記憶體區域都有交叉。

memcpy()是從src的起始部分開始複製,所以雖然第一種情況下沒有問題,但如果遇到第二種情況,則會發生錯誤,如圖所示,後兩個位元組在被複製前已經被覆蓋掉了。而memmove()則由於採用了不同的複製機制,所以可以正確處理第二種情況。

vs.net2003中所附原始碼如下(有刪):

memmove 和 memcpy的區別

memcpy和memmove 都是c語言中的庫函式,在標頭檔案string.h中,作用是拷貝一定長度的記憶體的內容,原型分別如下 void memcpy void dst,const void src,size t count void memmove void dst,const void src...

memcpy和memmove的區別

memcpy和memmove的區別 memcpy 和memmove 都是c語言中的庫函式,在標頭檔案string.h中,其原型分別如下 void memcpy void dst,const void src,size t count void memmove void dst,const void ...

memcpy和memmove的區別

memcpy和memmove的區別 memcpy 和memmove 都是c語言中的庫函式,在標頭檔案string.h中,其原型分別如下 void memcpy void dst,const void src,size t count void memmove void dst,const void ...