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