• 締切済み

構造体内のポインタのポインタにアクセスするには?

たとえば、 struct a { char **name } という構造体があったとして、 struct *a; a->name = malloc(sizeof(char *) * 3); としたときに、 for(i = 0; i < 3; i++){ a->name[i] = malloc(sizeof(char) * 10); } とするとエラーになります。 a->name配列の各要素をmallocするにはどうすればよいのでしょうか?

みんなの回答

  • yamada46
  • ベストアンサー率39% (13/33)
回答No.5

こんにちは。 int i; struct a *b; b = (struct a*)malloc(sizeof(struct a)); b->name=(char**)malloc(sizeof(char*) * 3); for (i=0; i<3; i++) { b->name[i] = (char*)malloc(sizeof(char) * 10); } 3行目が抜けてるからでは?mallocするのがいいかどうか はわかりませんが、想像するに、struct aの実態が無いからじゃないでしょうか?

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

本題については構造体変数の宣言の方法を確認してもらうことにして, C では C++ と違い void* から他の任意のポインタ型への変換にキャストは不要です>#2 の人.

  • nitscape
  • ベストアンサー率30% (275/909)
回答No.3

aという変数の宣言などいくつか原因があります。 下のようにしてはどうでしょうか? このままではメモリリークになりますが... struct aaa { char **name; }; void fff(void) { int i; struct aaa *a; a = (aaa*) malloc(sizeof(a)); a->name = (char**)malloc(sizeof(char*)*3); for(i = 0; i < 3; i++){ a->name[i] = (char*)malloc(sizeof(char)*10); } }

  • takscape
  • ベストアンサー率57% (15/26)
回答No.2

a->name[i]の型は、char*です。 mallocの戻り値の型は、void*です。 void*から他の型に変換するときには、 明示的なキャストが必要です。

回答No.1

どんなエラーになりますか?

関連するQ&A