memcpy和memmove的函式內部實現

2021-06-26 12:16:44 字數 1073 閱讀 7197

memcpy和memmove函式的實現,需要注意memmove的覆蓋問題,還有指標型別需要考慮。下面的例子中,先給出了錯誤的例子,而後給出了正確的例子,引以為戒!

區別:兩個函式都是進行n位元組記憶體內容的拷貝,入口引數和返回引數也都一樣,可是這兩個函式在內部實現上是有一定區別的,這主要是因為dest記憶體區域和src記憶體區域可能有四種不同的情況,注意count的影響.當兩個指標都指向要複製的那一片記憶體區的時候就有可能有問題。例如:

char *pa="abcd";
char *pb=pa+2;
memcpy(pa,pb,4);//複製完『a','b',字串已經變成"cdcd",與原來的設想不符了。

memcpy和memmove函式的實現,需要注意memmove的覆蓋問題,還有指標型別需要考慮。下面的例子中,先給出了錯誤的例子,而後給出了正確的例子,引以為戒!

src的記憶體區域和dest的記憶體區域相對位置和重疊關係有四種情況,memcpy沒有考慮重疊的情況,而memmove考慮到了全部情況,因此memcpy函式的時候可能出現意向不到的結果。

這兩個函式的實現:

***********下面兩個是錯誤的實現**************

void* memcpy(void* dest, void* source, size_t count)

void* memmove(void* dest, void* source, size_t count)

else

return ret; }

***********************正確的如下**************************

void* mymemcpy(void* dest, void* source, size_t count)   

return ret;

}      

void *my_memmove(void *dst,const void *src,int 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 ...

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