[英]Flexible Arrays in C99
注意:我已經寫了原始問題以使其更加清楚。
我有一個叫做
VcStatus readVcard( FILE *const vcf, Vcard **const cardp )
vcf是一個我將讀取的打開文件,而cardp是一個指向紙牌數組開始的指針。 一個文件中將包含多個卡。
readVCard一次讀取文件一行,然后調用函數parseVcProp識別該行中的關鍵字,並將其分配到結構中的適當位置。
這是結構
typedef struct { // property (=contentline)
VcPname name; // property name
// storage for 0-2 parameters (NULL if not present)
char *partype; // TYPE=string
char *parval; // VALUE=string
char *value; // property value string
void *hook; // reserved for pointer to parsed data structure
} VcProp;
typedef struct { // single card
int nprops; // no. of properties
VcProp prop[]; // array of properties
} Vcard;
typedef struct { // vCard file
int ncards; // no. of cards in file
Vcard **cardp; // pointer to array of card pointers
} VcFile;
因此,一個文件包含多個卡,一個卡包含多個屬性,等等。
關鍵是,一張卡可以具有許多屬性。 直到您完成閱讀,才知道有多少。
這是我不明白的。
我如何分配內存才能正確使用parseVcProp?
每次調用parseVcProp時,我顯然都希望它將數據存儲在新的結構中,那么我該如何事先分配此內存? 我只是malloc(sizeof(VcProp)* 1)嗎?
Vcard *getcards(int n) {
Vcard *c = malloc(sizeof(Vcard) + sizeof(VcProp) * n);
c->nprops = n;
return c;
}
您確實需要向我們展示產生錯誤的特定行。
話雖如此,對於像vcard
這樣的包含靈活數組成員的結構,您無法創建該類型的變量。 您只能創建指針變量。 例如:
vcard *vc = malloc(sizeof(vcard) + n*sizeof(VcProp));
此時, vc->prop[0]
到vc->prop[n-1]
是有效的數組元素(每個數組的類型為VcProp
)。
請注意,靈活數組成員是數組 , 而不是指針 。
抱歉給大家帶來混亂。 我發現了我的錯誤。
事情變得古怪的原因是因為propp是一個輸出指針,而不是我試圖使用Vcard-> prop作為傳遞參數的輸入指針,而實際上我只需要創建自己的並發送其地址即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.