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ểm | memcpy | memmove |
|---|---|---|
| Overlap an toàn | Không (UB) | Có |
| Hiệu năng | Nhanh hơn (có thể vectorize) | Chậm hơn một chút |
| Khi dùng | Đảm bảo không overlap | Có 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.