Sự khác nhau giữa hàm memcpy và memmove?

Cả 2 hàm memcpy memmove được sử dụng để copy N byte dữ liệu từ vùng nhớ này sang  vùng nhớ khác. Tuy nhiên, trong trường  hợp vùng nhớ nguồn overlap với vùng nhớ đích:

  • Hàm memmove đảm bảo việc copy dữ liệu và output là chính xác .
  • Hàm memcpy KHÔNG đảm bảo việc copy dữ liệu và output là chính xác.

Ví dụ sau sẽ giúp các bạn hiểu thêm về sự khác nhau của 2 hàm trong trường hợp vùng nhớ bị overlap.

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

char str1[20] = "vncoding.net";

void main( void )
{
    printf("The string: %s\n", str1);
    memcpy(str1 + 2, str1, 6);
    printf("New string: %s\n", str1);

    strcpy_s(str1, sizeof(str1), "vncoding.net");   // reset string

    printf("The string: %s\n", str1);
    memmove(str1 + 2, str1, 6);
    printf("New string: %s\n", str1);
    getch();
}

Kết quả:

Sự khác nhau giữa hàm memcpy và memmove
Sự khác nhau giữa hàm memcpy và memmove

Theo như kết quả, hàm memmove đảm bảo kết quả đúng như mong muốn (“vncodi” ghi đè lên “coding”).

1 Comment on Sự khác nhau giữa hàm memcpy và memmove?

Leave a Reply to Tiến Đạt Cancel reply