• 締切済み

c言語のポインタ

学校で、名前、住所などを構造体に入力するというプログラムをc言語で書いています。 そこで、質問なんですが・・・ fgetsで文字を入力し、構造体にデータを入れる関数に渡すと セグメンテーションエラーになってしまいます。 文字列のポインタの問題だと思うのですが、よくわかりません。 誰か教えてください!! ーーーーソースーーーーー printf("name "); fgets(xx,255,stdin); printf("%s",xx); printf("tel "); scanf("%s",t); strcat(t,"\n"); printf("zip "); scanf("%s",z); strcat(z,"\n"); printf("add "); scanf("%s",ad); strcat(ad,"\n"); printf("email "); scanf("%s",em); strcat(em,"\n"); root = makenode( *xx,ss,y,t,z,ad,em, root ); //関数で構造体にデータを挿入する 関数 BinNode *makenode( char *x,char *t,char *z,char*ad,char *em, BinNode *current ) { if( current == NULL ) //currentに何も入っていないとき { current = (BinNode*)malloc(sizeof(BinNode)); //領域を確保する strcpy( current->data, x ); //読みを入力 strcpy( current->tel, t ); //電話番号を入力 strcpy( current->zip, z ); //郵便番号を入力 strcpy( current->add, ad ); //住所を入力 strcpy( current->email, em ); //emailを入力 current->left = current->right = NULL; //右と左のノードをNULLにする }

みんなの回答

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

> スペースを入力しても読み込むようにしたいのですが・・・ No.2さんが書かれているとおり、 問題を解決するためのとっかかりは、 お書きになったソースコードを「包み隠さず、そのまま」 コピー&ペーストすることです。

  • Werner
  • ベストアンサー率53% (395/735)
回答No.2

> char *xx; > char y[255],t[255],z[10],ad[255],em[255]; 何でxxだけポインタなの? ポインタだと、mallocで領域確保せずにポインタが指す先の領域は使えないよ。 #どうでもいいことだけど255ってなんか気持ち悪いね。256にしない?(笑) > スペースを入力しても読み込むようにしたいのですが・・・ scanfの%s書式指定子は空白文字以外を読み込みます。 fgetsでも使って行単位で読み込んでください。 (fgetsは末尾に'\n'が残るので必要ないなら削除すること。) scanfでも%[^\n]とでもすれば改行文字まで読み込まれるとは思うけど、 そこまでしてscanfを使わなくても良いと思う。 気の利いたscanf -- part 1 http://homepage1.nifty.com/hujitako/yapt/SmartScanf1.htm 結局、コンパイル可能なソースの提示は無しなのか。 まあ、こっちで動作確認できなかったり、提示外の部分が問題だったりして、 正確な回答ができなくなるだけだから、 それでも良いって言うなら別にかまわんけど。

  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

ソースは一部抜粋じゃなくて、 その現象が発生するコンパイル可能な最小限のソースを作って欲しいな。 xxとかの宣言部がないから型が何なのか推測でしか分からないし、 BinNodeの構造もさっぱり分からん。 でぱっと見おかしそうな所は > root = makenode( *xx,ss,y,t,z,ad,em, root ); ここでxxに*がついてるところかな。

ckawrfgd03
質問者

補足

構造体は木構造です。 struct BinNode_type{ char data[255],tel[255],zip[255],add[255],email[255]; struct BinNode_type *left, *right; }; //構造体(木構造)のメンバの定義 変数の宣言は char *xx; char y[255],t[255],z[10],ad[255],em[255]; です。 スペースを入力しても読み込むようにしたいのですが・・・

関連するQ&A