memcpy和memmove的區別

2021-09-27 02:42:28 字數 702 閱讀 5862

void *memcpy(void *restrict s1, const void *restrict s2, size_t n);

void *memmove(void *s1, const void *s2, size_t n);

兩者前者不考慮資料重疊

後者考慮資料重疊

資料重疊無非兩種情況(src被拷貝的資料,dest被拷貝資料的目的地):

1.src在前dest在後,且資料長度大於src和dest的首部距離

2.dest在前src在後,且資料長度大於src和dest的首部距離

因為我們是將src中的資料拷貝到dest中

在第二種情況下,從資料頭開始拷貝,拷貝時的覆蓋不會對dest的資料產生影響,src中的部分資料會被覆蓋,但是被覆蓋的資料已經被拷貝到dest中,對實現功能無影響。

在第一種情況下,從資料頭開始拷貝,則src中的重疊資料會因為資料拷貝而被在未拷貝時就覆蓋,造成資料丟失。

#include /* size_t */

void *memcpy(void *dest, const void *src, size_t n)

#include /* for size_t */

void *memmove(void *dest, const void *src, size_t n)

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