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);
它們的作用是一樣的,唯一的區別是:當記憶體發生區域性重疊的時候,memmove保證拷貝的結果是正確的;memcpy不保證拷貝的結果的正確。
第一種情況:拷貝重疊的區域不會出現問題,內容均可以正確的被拷貝。
第二種情況:問題出現在右邊的兩個位元組,這兩個位元組的原來的內容首先就被覆蓋了,而且沒有儲存。所以接下來拷貝的時候,拷貝的是已經被覆蓋的內容,顯然這是有問題的。
實際上,memcpy只是memmove的乙個子集。
**實現memcpy函式如下:
#include#include#include#includevoid *my_memcpy(void *dest, void *src, size_t count)//記憶體拷貝
return dest;
}int main()
; float src[10];
int i;
my_memcpy(src, arr, 40); //拷貝了10個數,int型佔4個位元組,則count=4*10
for (i = 0; i
printf("\n");
system("pause");
return 0;
}
上述**將arr[10]=複製到src[10]中,執行結果為:
**實現memmove函式如下:
#include#include#includevoid *my_memmove(void *dest, void *src, size_t count)//記憶體移動,可以記憶體重疊
else }
int main()
; int i;
my_memmove(arr+4, arr+2, 16);//拷貝了4個數,int型佔4個位元組,則count=4*4
for (i = 0; i
printf("%d ", arr[i]);
system("pause");
return 0;
}
上述**將3,4,5,6複製到5,6,7,8處,執行結果為:1,2,3,4,3,4,5,6,9,10。
實際上,memcpy只是memmove的乙個子集。
memccpy()函式的功能也是複製記憶體,但是如果遇到某個特定值時立即停止複製。
本文出自 「scen」 部落格,請務必保留此出處
實現memcpy和memmove函式
題目 自己定義乙個函式,實現my memcpy和my memmove函式。題目分析 memcpy函式主要實現的是記憶體的拷貝,函式接受任意型別的引數,並且有拷貝個數的限制,函式與strcpy函式在功能上有相似點,也有不同點。memmove函式在memcpy函式的基礎上解決了記憶體重疊的問題。下面是m...
memcpy和memmove的實現
當我們不考慮一塊記憶體的具體內容與型別,而需要進行拷貝時,我們經常會用到memcpy或者memmove,memcpy和memmove 都是c語言中的庫函式,在標頭檔案string.h中,作用是拷貝一定長度的記憶體的內容,原型分別如下 void memcpy void dst,const void s...
memcpy和strcpy函式實現
函式原型 void memcpy void dest,const void src,size t n 思路 先將void轉化為char,然後按位賦值。memcpy不會按照 0 來判斷字串拷貝。void memcpy void dest,const void src,size t len return...