• ベストアンサー

構造体の型について

ある構造体を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); } ーーーーーーーーーーーーーーーーーーーーーーー 両プログラムの意図はまったく同じなのに何故いけないのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.2

動かない理由は、構造体の実体が無いからです。 構造体へのポインタは、あくまでもポインタでしかありません。 ポインタで指し示された先にその実体が無ければならないわけです。 質問の例では、 xxx bbb; xxx *aaa = &bbb; のようにすれば実体を指し示すことになり、動作するようになるはずです。 (それが意図したことかどうかはともかく。)

noname#5112
質問者

お礼

ありがとうございました。 教えていただいたとおりにしたら動きました。

その他の回答 (4)

  • me_no_car
  • ベストアンサー率24% (22/90)
回答No.5

#4です。 スペル間違えました。 malooc でなく malloc です。

  • me_no_car
  • ベストアンサー率24% (22/90)
回答No.4

みなさんの言われてる通りポインタの勉強をしましょう。 実態がないなら作ればいいだけなので aaa = (XXX *)malooc(sizeof(XXX)) の一行を追加すれば動きます。

noname#5112
質問者

お礼

ありがとうございました。 参考になります。

  • don_cha
  • ベストアンサー率34% (139/407)
回答No.3

入れる先の実体がないからです。 xxx iii; xxx* aaa; aaa = &iii; っとすれば、問題ありません。

noname#5112
質問者

お礼

ありがとうございました。 教えていただいたとおりにしたら動きました。

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.1

2つのプログラムは同じではありません。 1) xxx aaa; 2) xxx* aaa; 1では構造体変数が宣言されています。 2では構造体へのポインタが宣言されています。 「ポインタ」について理解を深めてください。

noname#5112
質問者

お礼

ありがとうございました。

関連するQ&A