- ベストアンサー
構造体の型について
ある構造体をxxxと名づける以下のプログラムを作成しました。 ーーーーーーーーーーー #include <stdio.h> #include <string.h> main() { typedef struct { char variable[64]; char type[64]; char value[512]; } xxx; xxx aaa; strcpy(aaa.variable,"bbb"); printf("%s\n",aaa.variable); } ーーーーーーーーーーー これは動き、bbbと表示されます。 しかしながら、構造体のポインタを使用した 以下のプログラムではコンパイルはとおりますが実行時にコアダンプして落ち ます。 ーーーーーーーーーーーーーーーーーーーー #include <stdio.h> #include <string.h> main() { typedef struct { char variable[64]; char type[64]; char value[512]; } xxx; xxx* aaa; strcpy(aaa->variable,"bbb"); printf("%s\n",aaa->variable); } ーーーーーーーーーーーーーーーーーーーーーーー 両プログラムの意図はまったく同じなのに何故いけないのでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
動かない理由は、構造体の実体が無いからです。 構造体へのポインタは、あくまでもポインタでしかありません。 ポインタで指し示された先にその実体が無ければならないわけです。 質問の例では、 xxx bbb; xxx *aaa = &bbb; のようにすれば実体を指し示すことになり、動作するようになるはずです。 (それが意図したことかどうかはともかく。)
その他の回答 (4)
- me_no_car
- ベストアンサー率24% (22/90)
#4です。 スペル間違えました。 malooc でなく malloc です。
- me_no_car
- ベストアンサー率24% (22/90)
みなさんの言われてる通りポインタの勉強をしましょう。 実態がないなら作ればいいだけなので aaa = (XXX *)malooc(sizeof(XXX)) の一行を追加すれば動きます。
お礼
ありがとうございました。 参考になります。
- don_cha
- ベストアンサー率34% (139/407)
入れる先の実体がないからです。 xxx iii; xxx* aaa; aaa = &iii; っとすれば、問題ありません。
お礼
ありがとうございました。 教えていただいたとおりにしたら動きました。
- toysmith
- ベストアンサー率37% (570/1525)
2つのプログラムは同じではありません。 1) xxx aaa; 2) xxx* aaa; 1では構造体変数が宣言されています。 2では構造体へのポインタが宣言されています。 「ポインタ」について理解を深めてください。
お礼
ありがとうございました。
お礼
ありがとうございました。 教えていただいたとおりにしたら動きました。