1. 程式人生 > 實用技巧 >memmove庫函式模擬實現

memmove庫函式模擬實現

//第一次嘗試:
#include<stdio.h> #include<stdlib.h> void* myMemmove(void* destin, const void* source,size_t num) { if (destin == NULL || source == NULL) { return NULL; } char* sour = (char*)source; char* dest = (char*)destin; if (dest > sour && dest < (sour + num)) {
for (int i = num - 1; i >= 0; i--) { *(dest + i)= *(sour + i); } } else { for (int i = 0; i < num; i++) { *(dest + i) = *(sour + i); } } return destin; } int main() { int arr[4] = { 1,2,3,4 }; int arr1[4] = { 0 }; myMemmove(arr1, arr,
sizeof(arr)); for (int i = 0; i < 4; i++) { printf("%d ", arr1[i]); }printf("\n"); return 0; }
//本程式碼實現了memmove的功能,主要就是要理解,當兩個欄位空間重疊時,就需要從後往前拷貝
//此處空間重疊並不是只要目標和源有重疊就算,而是如果目標的頭部重疊在了源中,那麼才算重疊,這點要想清楚,才能實現這個功能