如何创建结构数组,其中结构的最后一个元素是结构黑客

时间:2013-02-13 06:20:47

标签: c struct

假设我有以下类型的结构:

struct employee
    {
        int     emp_id;
        int     name_len;
        char    name[0];
    };

我知道

struct employee *e = malloc(sizeof(*e) + sizeof(char) * 128); 

相当于

struct employee
{
    int     emp_id;
    int     name_len;
    char    name[128]; /* character array of size 128 */
};

我的问题是,当结构中的最后一个元素是struct hack时,我可以创建这样的结构数组吗?

示例:我想创建一个结构数组employee [3];那么

员工[0]可以等同于

 struct employee
    {
        int     emp_id;
        int     name_len;
        char    name[128]; /* character array of size 128 */
    };

员工[1]可以等同于

struct employee
    {
        int     emp_id;
        int     name_len;
        char    name[256]; /* character array of size 256 */
    };

员工[2]可以等同于

struct employee
    {
        int     emp_id;
        int     name_len;
        char    name[512]; /* character array of size 512*/
    };

1 个答案:

答案 0 :(得分:4)

不,你不能这样做,出于各种原因,但你可以创建一个像:

这样的数组
struct employee *all[...];

如果你不这样做,你需要:

struct employee {
  ...
  char *name;
}

...您需要动态分配每个name并分配。

如果你考虑一下,数组中的每个元素都必须是相同的长度。如果没有,它怎么能被索引?此外,必须在编译时知道该长度。

但是如果每个employee元素都是一个指针,那么你可以使用struct hack使每个元素的大小不同,具体取决于name[]需要多少空间。