注:元の質問をより明確にするために書き直しました。
という関数があります
VcStatus readVcard( FILE *const vcf, Vcard **const cardp )
vcf は私が読み取るオープン ファイルで、cardp はカードの配列の先頭へのポインタです。ファイルには複数のカードが含まれます。
readVCard は一度に 1 行ずつファイルを読み取り、関数 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;
ファイルには複数のカードが含まれ、カードには複数のプロパティが含まれます。
問題は、1 枚のカードが任意の数のプロパティを持つことができるということです。それらを読み終えるまで、いくつあるかはわかりません。
これが私が理解していないことです。
parseVcProp を適切に使用するには、メモリをどのように割り当てる必要がありますか?
parseVcProp を呼び出すたびに、データを新しい構造体に格納したいのは明らかですが、このメモリを事前に割り当てるにはどうすればよいですか? malloc(sizeof(VcProp)*1) だけですか?