char a 0 柔性陣列

2021-10-05 04:10:33 字數 796 閱讀 3912

在編寫**的時候,偶然遇到了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的陣列的主要用途是為了滿足需要變長度的結構體。用法 在乙個結...