重建舊程式碼可以發現有問題的做法,例如在結構中使用零長度數組。這就提出了一個問題:為什麼要建立一個沒有元素的陣列?
考慮以下結構:
struct someData { int nData; BYTE byData[0]; }
零長度數組,如 byData 所示,是一個不尋常的選擇。通常,數組儲存元素。但是,長度為 0 的陣列可以用作指標。在本例中,byData 用作稍後動態分配的可變長度緩衝區的佔位符。
struct someData* mallocSomeData(int size) { struct someData* result = (struct someData*)malloc(sizeof(struct someData) + size * sizeof(BYTE)); if (result) { result->nData = size; } return result; }
此函數為 someData 結構和指定長度的緩衝區分配記憶體。結構中的零長度數組允許我們將其視為指針,引用動態分配的緩衝區。
要重構此程式碼,請考慮使用:
以上是為什麼在 C 結構中使用零長度數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!