實現memcpy和memmove函式

2021-07-13 08:53:28 字數 1446 閱讀 3366

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