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

私の質問は、構造体の最後の要素が構造体ハックの場合、そのような構造体の配列を作成できますか?

例:構造体の配列 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要素がポインターの場合、構造体ハックを使用して、それぞれに必要なスペースに応じて、それぞれを異なるサイズにすることができますname[]

于 2013-02-13T06:25:17.360 に答える