[C語言]宣告陣列的大小是0 ???
在C語言裡面,可不可以宣告一個大小是0的陣列? 例如: char array[0]; 在gcc的話是可以的,並且,如果你sizeof(array),得到的答案,會是0 幹嘛用的? 最常用的作用是,如果你想利用結構表達一組資料的header,而這個header後面的資料是預先不知道長度的陣列,那麼你可以在結構裡面定義一個陣列大小是0的成員,以後你就可以利用這個陣列成員變數去直接存取header之後的資料. 例如: struct data { char magic_num; int len; char databody[0]; }; 好了,假設你從任何一個地方收到一筆資料封包,這個封包會因為狀況不同而有不同的大小,但是資料的最前面兩個位元組都是固定一個magic number跟一個len代表資料本體的長度的話,你可以把這個封包轉型成struct data的型別,然後直接利用databody這個陣列變數來存取資料,不需要那麼辛苦操作指標來存取 例如 char *recive_buffer; struct data *data_r; recive_buffer = recive_from_other(); data_r = (struct data *)recive_buffer; printf("data total %d\n",data_r->len); printf("last data is %c\n",data_r->databody[len-1]); 如果你想要創造一個類似的資料封包,大小是30bytes,但是最前面兩個位元組依樣是魔術數字跟長度的話,你也可以利用這個方式來配置這個資料封包的記憶體 例如 char *send_buffer; send_buffer =(struct data *) malloc(sizeof(struct data) + (30 - 2)); send_buffer.len = (30 -2); send_buffer.databody[0] = 0; send_buffer.databody[1] = 1; ... ... ...