memcpy()和 memmove()都是C語言中的庫函數,在頭文件string.h中,做用是拷貝必定長度的內存的內容,原型以下函數
void *memcpy(void *dst, const void *src, size_t count);spa
描述:
memcpy()函數從src內存中拷貝n個字節到dest內存區域,可是源和目的的內存區域不能重疊。
返回值:
memcpy()函數返回指向dest的指針。指針
void *memmove(void *dst, const void *src, size_t count);code
描述:
memmove() 函數從src內存中拷貝n個字節到dest內存區域,可是源和目的的內存能夠重疊。
返回值:
memmove函數返回一個指向dest的指針。blog
他們的做用是同樣的,惟一的區別是,當內存發生局部重疊的時候,memmove保證拷貝的結果是正確的,memcpy不保證拷貝的結果的正確。內存
下面來寫 memmove()函數如何實現原型
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> char * memcopy(char *source, char *destinatin, int count) { if (source == NULL || destinatin == NULL || count <= 0) { return 0; } char *sou_index = source; char *des_index = destinatin; if (des_index < sou_index && des_index + count > sou_index) { sou_index = source + count; des_index = destinatin + count; while (count--) { *sou_index-- = *des_index--; } } else { while (count--) { *sou_index++ = *des_index++; } } return source; } int main() { char a[] = "i am a teacher"; char b[50] = {0}; int len; len = sizeof(a); printf("%s", memcopy(b, a, len)); }
memcopy沒有考慮內存重疊的狀況,直接將上面的if語句裏面的內容去掉就說memcopy的函數string