用 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 次浏览

开启你的 职业生涯

完成课程即可获得认证

开始学习
广告