Arduino 中的 memcpy 和 memmove
Ammar Ali
2023年1月30日
2021年4月29日
本教程将讨论如何使用 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