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