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

Hàm memmove() trong C/C++

Hàm memmove() copy khối bộ nhớ từ nguồn đến đích, an toàn khi overlap (xử lý đúng thứ tự copy). Khai báo trong <string.h>.

Cú pháp

void *memmove(void *dest, const void *src, size_t n);

Tham số giống memcpy. Trả về dest.

Ví dụ

#include <stdio.h>
#include <string.h>

int main() {
    char a[] = "Firststring";
    const char b[] = "Secondstring";
    memmove(a, b, 9);  // Copy 9 byte tu b sang a
    printf("Mang moi: %s\t%s", a, b);
    return 0;
}

Kết quả

Mang moi: Secondstrng   Secondstring

Giải thích: Copy 9 byte đầu của b ("Secondstr") đè lên a. a thành "Secondstrng".

Khác biệt memcpy vs memmove

Đặc điểmmemcpymemmove
Overlap an toànKhông (UB)Có
Hiệu năngNhanh hơn (có thể vectorize)Chậm hơn một chút
Khi dùngĐảm bảo không overlapCó thể overlap hoặc không chắc

Quy tắc: Mặc định dùng memmove cho an toàn. Chỉ dùng memcpy khi chắc chắn không overlap và cần tốc độ tối đa.