C語言變長數組 struct中char data[0]的用法__C語言

來源:互聯網
上載者:User

摘要:在實際的編程中,我們經常需要使用變長數組,但是C語言並不支援變長的數組。此時,我們可以使用結構體的方法實現C語言變長數組。


struct MyData 
{
 int nLen;
 char data[0];
}; 
在結構中, data是一個數組名;但該數組沒有元素; 該數組的真真實位址緊隨結構體MyData之後,而這個地址就是結構體後面資料的地址(如果給這個結構體分配的內容大於這個結構體實際大小,後面多餘的部分就是這個data的內容);這種聲明方法可以巧妙的實現C語言裡的數組擴充。
實際用時採取這樣:
struct MyData *p = (struct MyData *)malloc(sizeof(struct MyData )+strlen(str))
這樣就可以通過p->data 來操作這個str。

程式執行個體:


struct MyData 
{
 int nLen;
 char data[0];
};

int main()
{
 int nLen = 10;
 char str[10] = "123456789";

 cout << "Size of MyData: " << sizeof(MyData) << endl;

 MyData *myData = (MyData*)malloc(sizeof(MyData) + 10);
 memcpy(myData->data, str, 10);

 cout << "myData's Data is: " << myData->data << endl;

 free(myData);

 return 0;
}

輸出:
Size of MyData: 4
myData"s Data is: 123456789

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.