- 締切済み
構造体内のポインタのポインタにアクセスするには?
たとえば、 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するにはどうすればよいのでしょうか?
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- yamada46
- ベストアンサー率39% (13/33)
こんにちは。 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)
本題については構造体変数の宣言の方法を確認してもらうことにして, C では C++ と違い void* から他の任意のポインタ型への変換にキャストは不要です>#2 の人.
- nitscape
- ベストアンサー率30% (275/909)
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)
a->name[i]の型は、char*です。 mallocの戻り値の型は、void*です。 void*から他の型に変換するときには、 明示的なキャストが必要です。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
どんなエラーになりますか?