Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Viết hàm memcpy() và memmove() riêng C++

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!