- ベストアンサー
main関数以外での文字列の表示はどうやるの?
//を外すとエラーも警告も無くコンパイルはできるのですが、実行すると「エラーが発生したため終了します。「エラー報告を送信する」「送信しない」」という画面になり、それ以上できません。 なぜなんでしょうか。 //void dis(char *b){ // printf("%s\n", *b); //} void main(){ char a[] = "pipi"; // dis(a); printf("%s\n", a); } どなたか教えていただけないでしょうか。お願いしますm(_ _)m
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
dis()関数内での、b の使い方が間違っています。 printf() における "%s" 指示子には文字列へのポインタを指定しなければなりません。 アナタの書き方だと、ポインタbが指している文字を printf() に渡していますが、printf()はソレが文字列へのポインタであると解釈して、ポインタの中身を見ようとします。しかし、アナタが渡した文字の値の範囲は-128-127であり、そんな低位アドレスへアクセスすることはできませんので、結果セグメント違反を起こしてクラッシュするのです。 printf("%s\n", b) と書いてください。
その他の回答 (2)
- sittaka-kun
- ベストアンサー率22% (153/686)
次のひとです(笑) ポインタは宣言は*var,使用はvarの形になります。 使用するときに*varとすると,ポインタの指している値の参照になります。
お礼
ありがとうございました!!とても参考になりました!
- rabbit_cat
- ベストアンサー率40% (829/2062)
printf("%s\n", *b); を、 printf("%s\n", b); にしてください。 理由は、、多分、次の人が説明してくれるでしょう。
お礼
ありがとうございました!!とても参考になりました!
お礼
ありがとうございました!!とても参考になりました!