在 C/C++ 中,將一個結構體的所有欄位值複製到另一個相同類型的結構體,若逐欄位賦值,不僅程式碼冗長,結構定義變更時更需同步修改,維護極不便。本文提供一個通用的結構體複製函數,利用位元組級記憶體拷貝實現高效、通用的複製。
結構體在記憶體中各欄位連續儲存,且可分解為單個位元組。複製時只需令兩結構體對應位元組數值相等即可。函數以 void* 接收任意指標,配合 sizeof 取得類型大小,逐位元組複製:
void struct_copy(
void *p_struct1, // 目標結構體指標
void *p_struct2, // 來源結構體指標
unsigned int struct_size // 結構體大小,可用 sizeof(STRUCT_TYPE)
) {
int count = 0;
char *p_char1 = (char*)p_struct1;
char *p_char2 = (char*)p_struct2;
while (count != struct_size) {
*p_char1 = *p_char2;
p_char1++;
p_char2++;
count++;
}
}
對於同類型結構體 struct1、struct2,呼叫方式:
struct_copy(&struct1, &struct2, sizeof(STRUCT_TYPE));
此設計思想可延伸至進程間、電腦間通訊:發送端將資料拆解為位元組流傳輸,接收端重組為對應資料類型,比位元級傳輸更簡單高效。