c函式 memcpy memmove函式

2021-08-20 01:16:39 字數 1687 閱讀 5281

memcpy函式、memmove函式

1、都是以位元組為基本單位操作;

2、查詢msdn對二者的解釋:

memcpy函式:

(1)copies characters between buffers.(

在緩衝區之間複製字元)

(重疊區域中的原始源位元組在被覆蓋之前被複製。使用memmove處理重疊區域)

memmove函式:

(1)moves one buffer to another.(將乙個緩衝區移動到另乙個緩衝區)

)3、根據上述解釋模擬實現memcpy函式和memmove函式

#include#include#include#include//模擬實現memcpy:以位元組位基本操作單位

//賦值數字節長度的記憶體;以空指標型別來接收

void *my_memcpy(void *des, const void *src, int size)

return des;

}//模擬實現memmove

void *my_memmove(void *des, const void *src, int size)

} else

} return des;

}int main()

關於實現memmove函式考慮的記憶體重疊問題

4、**測試memmove、memcpy函式

memmove函式:有考慮記憶體重疊問題

char src[10] = "qweasdz";

int size = strlen(src) + 1;

char des[20];

//printf("%s\n", memmove(src + 1, src, size));//列印結果:qweasdz//說明:返回拷貝的值

//memmove(des, src, size);

//printf("%s\n", src);//列印結果:qweasdz

//memmove(src, src + 1, size);

//printf("%s\n", src);//列印結果:weasdz

memmove(src + 1, src, size);//第五種情況

printf("%s\n", src);//結果為:qqweasdz

memcpy函式:測試顯示memcpy函式也考慮了記憶體重疊問題

char src[10] = "qweasdz";

int size = strlen(src) + 1;

char des[20];

//memcpy(des, src, size);

//printf("%s\n", src);//列印結果:qweasdz

//memcpy(src, src + 1, size);

//printf("%s\n", src);//列印結果:weasdz

memcpy(src + 1, src, size);//第5種情況

printf("%s\n", src);//結果為:qqweasdz

5、使用c函式時,需要考慮記憶體重疊問題,還是去使用memmove函式。

C 函式 函式指標

區域性變數不能作為預設實參。作為預設實參的名字在函式宣告所在的作用於內解析,而這些名字的求值過程發生在函式呼叫時 sz wd 80 char def sz ht string screen sz ht sz wd,char def string window screen 呼叫screen ht,8...

C 函式 函式過載

如果同一作用域內的幾個函式名字相同但形參列表不同,我們稱之為過載函式。void print const char cp void print const int beg,const int end void print const int ia,size t size 這些函式接受的形參型別不一樣,...

C 介面函式(c中呼叫c 函式extern)

一 在c 的標頭檔案中 需要包含 ifdef cplusplus extern c endif在c 的cpp檔案中需要包含該函式的實現 const char dmnmsagentgetfirstpeerid const char dmnmsagentgetnextpeerid 二 在c的.c檔案中對...