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

Memcpy va strcpy đều sử dụng để copy dữ liệu từ vùng nhớ này sang vùng nhớ khác. Tuy nhiên, chúng có một số điểm khác nhau:

strcpy()

  • Copy chuỗi kí tự nguồn sang chuỗi đích. Hàm strcpy copy kí tự đến khi gặp kí tự NULL thì dừng lại.

memcpy()

  • Copy chính xác số byte dữ liệu từ vùng nhớ nguồn sang vùng nhớ đích.

Chú ý: cả 2 hàm không xử lí được trường hợp overlap buffer.

Các bạn xem thêm ví dụ dưới đây để hiểu rõ hơn về sự khác nhau giữa 2 hàm này.


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

void dump(char* s, int sz);

void main()
{
    char s[]={'v', 'n', '\0', 'c', 'o', 'd', 'i', 'n', 'g'};
    char strcpy_buf[5];
    char memcpy_buf[5];

    memset(strcpy_buf, NULL, 9);
    memset(memcpy_buf, NULL, 9);

    strcpy(strcpy_buf, s);
    memcpy(memcpy_buf, s, 9);

    printf("strcpy_buf = ");
    dump(strcpy_buf, 9);

    printf("memcpy_buf = ");
    dump(memcpy_buf, 9);
    
    getch();
}

void dump(char* s, int sz)
{
    char *p = s;
    int i;
    for(i = 0; i < sz; i++)
    {
        printf("%.2x ", *(p+i)); // hexa ASCII
    }
    for(i = 0; i < sz; i++)
    {
        printf("%c", (p+i)? *(p+i) : ' '); // characters
    }
    printf("\n");
}

Kết quả:

Sự khác nhau giữa memcpy và strcpy
Sự khác nhau giữa memcpy và strcpy

Be the first to comment

Leave a Reply