memcpy () trong c
Hàm memcpy()
trong C, để copy dữ liệu từ vùng nhớ này sang vùng nhớ khác.
Cú pháp: void *memcpy(void* dest, const void *src, size_t n)
dest
: con trỏ tới vị trí dùng để lưu trữ dữ liệu.src
: con trỏ tới vị trí chứa dữ liệu cần copy.n
: Số lượng byte cần copy.
Lưu ý: Tham số đầu vào của hàm là một con trỏ đa năng void *
, cho nên có thể truyền bất cứ kiểu dữ liệu nào vào trong hàm đều được. Vd: struct
, union
, int
, char
, ...
#include <stdio.h>
#include <string.h>
#include <stdint.h>
// Cú pháp:
int main()
{
char src[] = "Hello World";
char dest[20];
uint8_t arr[] = { 1, 2, 3, 4};
uint32_t arr_variable;
// Copy 13 bytes từ src sang dest
memcpy(dest, src, strlen(src) + 1); // + 1 là thêm vị trí cho kí tự \n
printf("Source: %s\n", src);
printf("Destination: %s\n", dest);
printf("dest[0] = %c\n", dest[0]);
// Thử nghiệm với mảng
printf("arr[0]: 0x%02X\n",arr[0]);
memcpy(&arr_variable, arr, sizeof(arr_variable));
printf("arr_variable = %d\n", arr_variable);
printf("arr_variable = 0x%X\n", arr_variable);
}
Output:
Source: Hello World
Destination: Hello World
dest[0] = H
arr[0]: 0x01
arr_variable = 67305985
arr_variable = 0x4030201
Qua kết quả trên ta nhận thấy được kết quả khi copy giá trị từ array sang 1 biến trong c bằng hàm memcpy()
là như thế nào
- Byte đầu tiên trong biến thì sẽ tương ứng với phần tử arr[0], và cứ tiếp tục lần lượt như vậy.
- Thứ tự sắp xếp các phần tự trong
arr
vàoarr_variable
dựa vàolittle-endian
(nghĩa là byte thấp, ít quan trọng nhất LSB sẽ đặt vào memory trước).
All rights reserved