gnu c 長度為0的陣列的使用

2021-09-11 07:41:38 字數 668 閱讀 7882

長度為的陣列在標準c和c++中是不允許的,如果使用長度為的陣列,編譯時會產生錯誤,提示陣列長度不能為。

但在gnuc中,這種用法卻是合法的。它的最典型的用法就是位於陣列中的最後一項。

struct description;

struct description *thisline = (struct description *) malloc(sizeof(struct description) + content_length);

thisline->length = content_length;

這段**的主要含義是定義了乙個結構體,並對其進行初始化,上面結構體的第二個成員變數contents[0]事實上是不佔記憶體空間的,

因此整個結構體的長度sizeof(struct description )為4。當採用malloc為其申請記憶體空間時,如上所示,

申請了一段長度為結構體長度加可變長度的記憶體空間給結構體型別的指標,這時contents就指向申請的可變長度的記憶體空間。

由於是一次申請的,所以這段可變長度的記憶體空間和前面的結構體長度的記憶體空間是連續的。對於這段可變長度的記憶體空間,

可以採用陣列的方式對其進行訪問。對於整個結構體,當不再使用時,可以使用free函式一次性對其進行釋放,

而不必像指標那樣分別釋放參考:

C語言長度為0的陣列

前面在看xen 的原始碼時,遇到了一段 如下所示 注意上面最後一行的 這裡定義了乙個長度為的陣列,這種用法可以嗎?為什麼可以使用長度為 0 的陣列?長度為 的陣列到底怎麼使用?這篇文章主要針對該問題進行簡單的講解。廢話不多說了,現在就開始。長度為的陣列在標準c和 c 中是不允許的,如果使用長度為 的...

C C 中長度為0的陣列

參考文獻 近日在看專案中的框架 時,發現了了乙個奇特的語法 長度為0的陣列例如 uint8 t buf 0 我從未見過這樣的寫法,所以在網上查了查資料,了解並記錄下來.在標準的c c 中,長度為0的陣列是不被允許的,它算是乙個c c 擴充套件,如果你的編譯器支援這個擴充套件,你就可以使用它.vs系列...

長度為0的字元陣列的賦值

結構體格式如下 struct ss t 需要給結構體中的msg賦值,由於msg的長度為0,直接賦值時程式提示賦值錯誤,經過處理之後,可以使用以下方式賦值 int totallen int command char msg 123456 int testlen sizeof msg char buf ...