程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> C語言變長數組 struct中char data[0]的用法

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

編輯:關於C

摘要:在實際的編程中,我們經常需要使用變長數組,但是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。

程序實例:

\#include vc3RyZWFtPjxicj4KPGltZyBhbGlnbj0="top" src="https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017010313511456.gif" alt="\">
\using namespace std;
\
\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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved