c - C99 中的灵活数组

标签 c arrays malloc structure realloc

注意:我已经重写了原始问题以使其更加清晰。

我有一个函数叫做

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;
}

关于c - C99 中的灵活数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4834636/

相关文章:

c - 结构体 : dereferencing pointer to incomplete type 中的枚举

c++ - C 和 C++ 中 struct 的区别

c - 我应该照顾 memcmp 中的 n 吗?

c - unsigned int T = 0xFFFFFFFF 在 C 中等于 -1?它不应该在未签名后立即充当 2 恭维吗?

javascript - 我需要在对象数组中找到一个键并将其与正则表达式匹配

Ruby 以相反的顺序按条件对数组进行排序

php - 格式化关联数组声明

c - 段错误(malloc 结构)

c - 如何解决使用malloc时多次初始化的问题?

c - 在C中实现Realloc