• ベストアンサー

malloc関数について。

typedef struct a{ char *simei; int nenrei; }MEIBO; void main(void) { MEIBO a[5]; int wa; for(i = 0; i <= 4; i++ ) { a[i].simei = malloc(100 * sizeof(char) ); if( a[i].simei == NULL ) /* 領域確保に失敗したか */ { printf( "%dバイトの領域確保に失敗", 100 * sizeof(char) ); return 1; } printf("%d番目を入力してください\n",i+1); scanf("%s",&a[i].simei); printf("%s\n",a[i].simei); } C言語初心者です。これで入力したa[i].simeiが表示されないのですが、間違いを指摘していただけますでしょうか。宜しくお願いします。

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

  • ベストアンサー
  • ddnp009
  • ベストアンサー率25% (15/58)
回答No.3

【致命的】 ・scanf() は、charへのポインタを受け取ります。  『a[i].simei』←これがすでにポインタ。 ・for() のループ用 i が未定義 ・ブレース { } 対応していない 【かすり傷】 ・main関数は、通常intを返すように定義。 →あなたのプログラム自体の戻り値を通知してやりましょう ・malloc() 確保した領域を解放していません ・そもそもループ中、毎回mallocせずともよい(少なくともこのプログラムでは)

skyskynet
質問者

お礼

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

その他の回答 (2)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

scanf("%s",&a[i].simei); が間違い。 printf("%s\n",a[i].simei); は間違ってないのに、惜しいです。 scanf("%s",a[i].simei); または scanf("%s",&a[i].simei[0]); が正解。

skyskynet
質問者

お礼

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

回答No.1

1.mallocを型キャストしましょう。  このばあい (char *)malloc(...); です。 2.mainの型  途中、return 1;とありますね。main()をint型にしましょう。 3.iの宣言  省略してるだけかな…? iの宣言が見つかりません。 そして一番の問題点は……scanfの中にあります!! もう一度、scanfの仕様を調べてみてください。

skyskynet
質問者

お礼

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

関連するQ&A