下記のような構造体が宣言されている場合、

A.c.e ←を配列扱いにし、
A.c.e[0].g.h ←を配列扱いにし、
A.c.e[0].g.h[0].iにデータを設定するには、
どのように領域を確保すれば良いのでしょうか?
eee型はポインタ宣言のみされていて配列宣言されて
いません。(Max10配列)

typedef struct
{
int len;
char *i;
}
hhh;

typedef struct
{
int number;
hhh *h;
}
ggg;

typedef struct
{
fff f;
ggg g;
} eee;

typedef struct
{
int number;
eee *e;
} ccc;

typedef union
{
aaa a;
bbb b;
ccc c;
ddd d;
} A;

このQ&Aに関連する最新のQ&A

A 回答 (1件)

領域の確保には malloc() を使う、ってことは OK でしょうか?



ccc の e、ggg の h、hhh の i をそれぞれ 10 個取るとしましょう。
sting さんは、分かっているようですが、入れ物を先に確保して、それから
その内容を確保するを繰返すだけです。

ccc の e を確保して、ggg の h を確保するのは、以下のような感じ。

#define MAX_SIZE 10

int i;
A a;

a.c.e = malloc(sizeof(eee) * MAX_SIZE);
for (i = 0 ; i < MAX_SIZE ; ++i) {
  a.c.e[i].g.h = malloc(sizeof(hhh) * MAX_SIZE);
}


分かります?

更に、hhh の i を確保するのは、これの繰返しになります。

a.c.e = malloc(sizeof(eee) * MAX_SIZE);
for (i = 0 ; i < MAX_SIZE ; ++i) {
  a.c.e[i].g.h = malloc(sizeof(hhh) * MAX_SIZE);
  for (j = 0 ; j < MAX_SIZE ; ++j) {
    a.c.e[i].g.h[j].i = malloc(sizeof(char) * MAX_SIZE);
  }
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報