Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เขียน memcpy() และ memmove() ของคุณเองใน C++


memcpy() ฟังก์ชั่นเป็นฟังก์ชัน inbuilt ที่ใช้ในการคัดลอกข้อมูลจากตำแหน่งต้นทางไปยังตำแหน่งปลายทาง

ต้นแบบของฟังก์ชัน memcpy -

เป็นโมฆะ * memcpy(เป็นโมฆะ *destination_location เป็นโมฆะ *source_location ขนาด size_t)

เราจะทำการคัดลอกตัวอักษรจากต้นทางไปยังปลายทาง

โปรแกรมแสดงการดำเนินการแก้ไข

ตัวอย่าง

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