- ベストアンサー
ポインタ配列
ポインタ配列によるひとつのプログラムを組もうと思っています。 で、以下のようなプログラムを作ってみました。 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文字以下を想定しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
char *str[NUM]; と宣言しておりますが、ポインタの配列しかないので、データを入れることができません。 入力する文字数分のバッファを確保しなければ無理です。 なお、'*'でポインタを宣言した場合は、アドレスを格納するための4バイトだけ領域が確保されます。 char str[NUM][100]; とかで宣言すれば、scanfで100バイト(半角99文字)まで入力が可能です。 また、printfで%cでstr[i]を出力しようとしていますが、文字列ポインタを出力する場合は%sを利用します。 %cで1バイトだけ表示したいのであれば、str[i][0]としてください。
その他の回答 (1)
- arukamun
- ベストアンサー率35% (842/2394)
こんばんは 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]; の様にしてしまいます。
お礼
ありがとうございました。 おかげさまでうまく動きました。
お礼
ありがとうございました