文件讀取到 char *bufheader (malloc),需拷貝到定長數組 BYTE m_byData[MAX] (MAX > BUFLENGTH)。
memcpy(m_byData, bufheader, BUFLENGTH);
// 使用完釋放
free(bufheader);
BYTE m_byData[MAX];
char *bufheader = (char *)m_byData; // 直接指向數組首地址
FILE *fp = fopen(filename, "rb");
fread(bufheader, 1, BUFLENGTH, fp); // 直接讀入數組
// 後續直接用 m_byData,無需拷貝、無需 free
**優勢**:省去 malloc/free、省去 memcpy、消除內存洩漏風險、緩存局部性更好。
struct Buffer {
BYTE data[MAX];
size_t len;
void readFromFile(const char* filename) {
FILE* fp = fopen(filename, "rb");
len = fread(data, 1, MAX, fp);
fclose(fp);
}
};
m_byData = bufheader **非法**:數組名是常量指針,**不可作為左值賦值**。free(bufheader),且 memcpy 長度以實際讀取返回值 fread 為準,而非 BUFLENGTH。MAX > BUFLENGTH 確保數組足夠大,防止溢出。最佳實踐:**直接聲明數組,讓文件讀取指針指向數組首地址**,零拷貝、零管理、最高效。