C 庫函數 void *memmove(void *dest, const void *src, size_t n) 從 src復制 n 個字符到 dest,
C 庫函數 void *memcpy(void *dest, const void *src, size_t n) 從存儲區 src復制 n 個字節到存儲區 dest。
但是在重疊內存塊這方面,memmove() 是比 memcpy() 更安全的方法。
如果目標區域和源區域有重疊的話,memmove() 能夠保證源串在被覆蓋之前將重疊區域的字節拷貝到目標區域中,復制后源區域的內容會被更改。
如果目標區域與源區域沒有重疊,則和 memcpy() 函數功能相同。
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ const char dest[] = "1234567890"; const char src[] = "abcdefghij"; printf("處理之前 dest = %s, src = %s\n", dest, src); memmove(dest, src, 3); printf("直接處理 dest = %s, src = %s\n", dest, src); memmove(dest+4, ((char * )src)+3, 3); printf("偏移處理 dest = %s, src = %s\n", dest, src); return 0; }
目標dest類型可以是 cahr[] ,也可以是char * ,可以直接使用偏移,
源src參數類型必須是 char *,如果不是需要先轉換后再使用偏移。