memcpy() là hàm built-in dùng để copy dữ liệu từ vị trí nguồn đến vị trí đích.
Nguyên mẫu: void* memcpy(void* destination, void* source, size_t size)
Cách làm: copy từng byte từ source đến destination.
Ví dụ memcpy()
#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(dataD, dataS, strlen(dataS) + 1);
printf("Chuỗi đã copy: %s", dataD);
return 0;
}
Kết quả
Chuỗi đã copy: Hello!
memmove() tương tự memcpy() nhưng xử lý được trường hợp source và destination chồng chéo nhau (overlap).
Trong memmove(), dùng mảng tạm để xử lý overlap.
Ví dụ memmove()
#include <stdio.h>
#include <string.h>
void MemmoveFunc(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];
delete[] temp;
}
int main() {
char dataS[] = "Hello!";
char dataD[100];
MemmoveFunc(dataD, dataS, strlen(dataS) + 1);
printf("Chuỗi đã move: %s", dataD);
return 0;
}
Kết quả
Chuỗi đã move: Hello!