Arduino 中的 memcpy 和 memmove

Ammar Ali 2023年1月30日 2021年4月29日
  1. 使用 Arduino 中的 memcpy() 函数复制内存块
  2. 使用 Arduino 中的 memmove() 函数复制内存块
Arduino 中的 memcpy 和 memmove

本教程将讨论如何使用 memcpy()memmove() 函数将内存块从一个变量复制到另一个变量。

使用 Arduino 中的 memcpy() 函数复制内存块

如果要将一个变量的内容复制到另一个变量,则可以使用 memcpy() 函数轻松地完成此操作。此函数接受三个输入参数。第一个参数是要粘贴数据的变量。第二个参数是要从中复制数据的变量。第三个参数是你需要从第二个变量复制的 bytes 数。例如,考虑我们想将数据从一个数组复制到另一个数组。请参见下面的示例代码。

int firstArray[10];
int secondArray[] = {1,2,3,4,5,6,7,8,9,0};
void setup(){
    memcpy(firstArray, secondArray, sizeof(secondArray));
}

在上面的代码中,我们将变量 secondArray 中存在的所有数据复制到了变量 firstArray 中。请注意,你可以在第三个参数中更改要复制的字节数。该函数不检查溢出,如果两个变量的地址重叠,则不会收到所需的输出。因此,可以使用 memmove() 函数来代替使用此函数。

使用 Arduino 中的 memmove() 函数复制内存块

当发生溢出或内存地址相同时,memcpy() 函数会产生问题。你可以使用 memmove() 函数而不是 memcpy() 函数来解决上述问题。memmove() 函数执行与 memcpy() 函数相同的任务,但忽略溢出。因此它将解决许多问题。考虑使用 memmove() 函数解决与上述相同的示例。

int firstArray[10];
int secondArray[] = {1,2,3,4,5,6,7,8,9,0};
void setup(){
    memmove(firstArray, secondArray, sizeof(secondArray));
}

在以上两个示例中,结果都是相同的,但是可以使用 memmove() 函数来消除出错的机会。

Author: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook