下記プログラムを組みました。
コンパイルは通りますが、実行できません。
ポインタでつまずいていると思うのですが、ダメな理由が分かりません。
恐れ入りますが、宜しくお願いします。
#include <stdio.h>
void main(void)
{
struct name{
char *sei;
char *mei;
};
struct table {
struct name *n;
int age;
char *hobby;
};
struct table x,y;
x.n->sei = "Turing";
printf("sei = %s\n",x.n->sei);
}
y使ってないのはどうでもいいです
nの実体が無いです
まず
struct name n;
x->n = &n;
こんな感じでnの実体を作らないと。
試しに、今x->nには何が入ってますか?
y使ってないのはどうでもいいです
nの実体が無いです
まず
struct name n;
x->n = &n;
こんな感じでnの実体を作らないと。
試しに、今x->nには何が入ってますか?
有難う御座います。
やってみましたが、
x.n+1->sei = "Turing1";
x.n+2->sei = "Turing2";
x.n+3->sei = "Turing3";
の部分で、コンパイルエラーがでます。
>>>> -> か ->* の左には構造体のポインタが必要(関数 main )
n+1 という表現は正しいでしょうか?
宜しくお願いします。
今更ですが(一度回答したんですが消えてた?)
x.n[1]->sei="Turing1"
とか出来ます
table に、必ず name がついてまわるなら、こうした方が良いと思うな。
struct name{ char *sei; char *mei; }; struct table { struct name n; /* ポインタじゃなくする */ int age; char *hobby; }; struct table x; x.n.sei = "Turing"; /* n はポインタじゃないので、-> じゃなくて、ピリオド */ printf("sei = %s\n",x.n.sei); /* こっちも */
構造体での入れ子とポインタの使い方を理解したいので、
ポインタで無くするというのはナシでお願いします。
ラジャー。
二つの構造体が、正しく組み合わさって動くためには、以下のような関係になっている必要があります。
質問にあるソースだと、name 構造体の実体が作られていないこと、table 構造体の n メンバーが name の実体に相当する領域を指していないこと、が、正しく動かない理由です。
例えば、こんな感じ。
struct name{ char *sei; char *mei; }; struct table { struct name *n; int age; char *hobby; }; struct table x; x.n = (struct name *)alloca(sizeof(struct name)); /* ★ */ x.hobby = "My hobby !"; x.n->sei = "Turing"; x.n->mei = "..."; printf("sei = %s\n",x.n->sei);
回答に追記しました。
有難う御座います。
構造体tableのメンバーに構造体nameのポインタを用いるのは
使い辛いことが分かりました。
有りがとう御座います。
下のように、構造体ポインタの実体(実アドレス)を代入してやる必要があります。
#include <stdio.h> void main(void) { struct name { char *sei; char *mei; } name_r; struct table { struct name *n; int age; char *hobby; }; struct table x,y; x.n = &name_r; /* ポインタの実体を代入 */ x.n->sei = "Turing"; printf("sei = %s\n",x.n->sei); }
有難う御座います。
実体が必要なんですね。
有難う御座います。
2012/06/11 22:12:57やってみましたが、
x.n+1->sei = "Turing1";
x.n+2->sei = "Turing2";
x.n+3->sei = "Turing3";
の部分で、コンパイルエラーがでます。
>>>> -> か ->* の左には構造体のポインタが必要(関数 main )
n+1 という表現は正しいでしょうか?
宜しくお願いします。
今更ですが(一度回答したんですが消えてた?)
2012/06/17 22:33:26x.n[1]->sei="Turing1"
とか出来ます