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:
- 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.
- 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ả:
Leave a Reply
You must be logged in to post a comment.