用 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!

更新於: 2020 年 4 月 17 日

766 次瀏覽

開啟你的 職業生涯

完成課程即可獲得認證

開始學習
廣告