在編寫**的時候,偶然遇到了char a[0]的情況,發現是柔性陣列,查閱資料後,發現一篇部落格講的聽清楚的,暫時不做贅述了
這裡直接說一下柔性陣列的使用方法:
struct buffer
;// 直接 sizeof(buffer)
=4,int 佔4個位元組,而cdata只有0個元素,資料名cdata不占用空間,所以buffer大小為4。
// 使用分為三步:
// step 1,比如我要在buffer結構體的cdata中存入1024位元組的資料,那麼動態分配乙個(sizeof(buffer)
+1024
)位元組的空間。
char *tmp =
(char*
)malloc(sizeof(buffer)
+1024);
// step2,強制型別轉換,tmp轉為buffer型別。
buffer *p =
(buffer*
)tmp;
p->
len=
1024;//
len設值為1024
memcpy(p.cdata,
"1024 data............"
,1024);
// 給 cdata 陣列賦值
// step3,接下來便可以正常使用該資料結構了,如下**假設場景為傳送1024位元組的資料
send(socket,p,sizeof(buffer)
+1024);
//傳送資料
柔性陣列(0長度陣列)
柔性陣列這個概念相信大多數人博友都沒有聽說過,但是它確實存在。在c99中,結構 結構體 的最後乙個元素允許是未知大小的陣列,這就叫做柔性陣列成員。比如 struct s 或者是 struct s 一 結構中柔性陣列成員前面必須至少有乙個其他成員比如,當你建立含有柔性陣列成員的結構體時,結構體成員不能...
struct char data 0 柔性陣列
柔性陣列即陣列大小待定的陣列 c語言中結構體的最後乙個元素可以是大小未知的陣列 c語言中可以由結構體產生柔性陣列 include include typedef struct soft array softarray intmain for i 0 ilen i free sa return0 柔性...
C C 柔性陣列 char 0
在標準c和c 中0長陣列如chararray 0 是不允許使用的,因為這從語義邏輯上看,是完全沒有意義的。但是,gun中卻允許使用,而且,很多時候,應用在了變長結構體中,如 structpacket 首先對0長陣列做乙個解釋 用途 長度為0的陣列的主要用途是為了滿足需要變長度的結構體。用法 在乙個結...