1. 程式人生 > >c結構體中char[0]的作用

c結構體中char[0]的作用

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 <iostream>

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
         由於陣列沒有元素,該陣列在該結構體中分配佔用空間,所以sizeof(struct Mydata) = 4。
         malloc申請的是14個位元組的連續空間,它返回一個指標指向這14個位元組,強制轉換成struct INFO的時候,前面4個位元組被認為是Mydata結構,後面的部分拷貝了“123456789”的內容。