memcpy和memmove的區別

2021-06-05 22:15:03 字數 1013 閱讀 2083

memcpy和memmove的區別

memcpy()和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的值。當源記憶體區域和目標記憶體區域無交叉時,兩者的結果是一樣的,但如果有交叉呢?先看下圖:

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

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

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

void

* __cdecl memcpy

(void

* dst,

const

void

* src,

size_t

count

)return

(ret);}

void

* __cdecl memmove

(void

* dst,

const

void

* src,

size_t

count)}

else

}return

(ret);}

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 ...

memmove 和 memcpy的區別

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