簡體   English   中英

C Struct數組成員沒有特定長度

[英]C Struct array member without specific length

我遇到過這段代碼:

struct test                   
{                                        
 uint32       num_fields;            
 char array_field [];               
}; 

我怎么能理解array_field 這是C語言的gcc擴展嗎?

它是一個C99功能,稱為靈活數組成員 ,通常用於創建可變長度數組。

它只能被指定為一個結構的最后一個成員,而無需指定尺寸(如在array_field [];


例如,您可以執行以下操作,並且成員arr將為其分配5個字節:

struct flexi_example
{
int data;
char arr[];
};


struct flexi_example *obj;

obj = malloc(sizeof (struct flexi_example) + 5);

它的優點/缺點在這里討論:

C中的靈活陣列成員 - 糟糕嗎?

此類結構通常在堆上以計算的大小分配,代碼如下:

#include <stddef.h>

struct test * test_new(uint32 num_fields)
{
    size_t sizeBeforeArray = offsetof(struct test, array_field);
    size_t sizeOfArray = num_fields * sizeof(char);
    struct test * ret = malloc(sizeBeforeArray + sizeOfArray);
    if(NULL != ret)
    {
        ret->num_fields = num_fields;
    }
    return ret;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM