1

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

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];以便

employee[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*/
    };
4

1 回答 1

4

不,由于各种原因,你不能这样做,但你可以制作一个像这样的数组:

struct employee *all[...];

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

struct employee {
  ...
  char *name;
}

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

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

但是如果每个employee元素都是一个指针,那么您可以使用 struct hack 使每个元素具有不同的大小,具体取决于name[].

于 2013-02-13T06:25:17.360 回答