0

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ào arr_variable dựa vào little-endian (nghĩa là byte thấp, ít quan trọng nhất LSB sẽ đặt vào memory trước).

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí