用 C++ 編寫你自己的 memcpy() 和 memmove()
memcpy() 函式是一個用於從源位置向目標位置複製資料的內建函式。
memcpy 函式的原型 −
void * memcpy(void *destination_location, void *source_location, size_t size)
我們將逐個字元從源複製資料到目標。
展示解決方案實現的程式,
示例
#include<stdio.h> #include<string.h> void MemcpyFunc(void *dest, void *src, size_t n){ char *dataS = (char *)src; char *dataD = (char *)dest; for (int i=0; i<n; i++) dataD[i] = dataS[i]; } int main() { char dataS[] = "Hello!"; char dataD[100]; MemcpyFunc(dataS, dataD, strlen(dataS)+1); printf("Copied string is %s", dataD); return 0; }
輸出
Copied string is Hello!
memmove() 函式類似於 memcpy(),它也逐個字元地從源向目標複製資料。它克服了 memcopy() 的一個問題,該問題會在源和目標相互重疊時出現。
在我們的 memmove() 中,我們將使用一個臨時陣列來處理源和目標重疊的問題。
展示解決方案實現的程式,
示例
#include<stdio.h> #include<string.h> void MemcpyFunc(void *dest, void *src, size_t n){ char *dataS = (char *)src; char *dataD = (char *)dest; char *temp = new char[n]; for (int i=0; i<n; i++) temp[i] = dataS[i]; for (int i=0; i<n; i++) dataD[i] = temp[i]; } int main() { char dataS[] = "Hello!"; char dataD[100]; MemcpyFunc(dataS, dataD, strlen(dataS)+1); printf("Moved string is %s", dataD); return 0; }
輸出
Moved string is Hello!
廣告