• ベストアンサー

ポインタ配列

ポインタ配列によるひとつのプログラムを組もうと思っています。 で、以下のようなプログラムを作ってみました。 1:#include<stdio.h> 2:#define NUM 5 3:main(void){ 4: char *str[NUM]; 5: int i; 6: for(i=0;i<NUM;i++){ 7: printf("string --->"); 8: scanf("%s",str[i]); 9: } 10: for(i=0;i<NUM;i++){ 11: printf("str[%d] --> %c\n",i,str[i]); 12: } 13:} これなのですが、8行目のscanf文でコンパイルエラーではなく、実行エラーが出ます。どのようにすれば動くようになるのでしょうか? 入力する文字は、9文字以下を想定しています。

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

  • ベストアンサー
  • madman
  • ベストアンサー率24% (612/2465)
回答No.1

char *str[NUM]; と宣言しておりますが、ポインタの配列しかないので、データを入れることができません。 入力する文字数分のバッファを確保しなければ無理です。 なお、'*'でポインタを宣言した場合は、アドレスを格納するための4バイトだけ領域が確保されます。 char str[NUM][100]; とかで宣言すれば、scanfで100バイト(半角99文字)まで入力が可能です。 また、printfで%cでstr[i]を出力しようとしていますが、文字列ポインタを出力する場合は%sを利用します。 %cで1バイトだけ表示したいのであれば、str[i][0]としてください。

masa0720
質問者

お礼

ありがとうございました

その他の回答 (1)

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.2

こんばんは 1 :#include<stdio.h> 2 :#define NUM 5 3 :main(void){ 4 :  char *str[NUM]; 5 :  int i; 6 :  for(i=0;i<NUM;i++){ 7 :    printf("string --->"); 8 :    scanf("%s",str[i]); 9 :  } 10:  for(i=0;i<NUM;i++){ 11:    printf("str[%d] --> %c\n",i,str[i]); 12:  } 13:} 8行目のscanfですが、 scanf("%s",&str[i]); と変更して見て下さい。 また、*str[NUM]ですが、大きさがありませんので、誤動作する可能性を秘めています。 こういった場合、私でしたら4行目で char str[NUM][256]; の様にしてしまいます。

masa0720
質問者

お礼

ありがとうございました。 おかげさまでうまく動きました。

関連するQ&A