• ベストアンサー

main関数以外での文字列の表示はどうやるの?

//を外すとエラーも警告も無くコンパイルはできるのですが、実行すると「エラーが発生したため終了します。「エラー報告を送信する」「送信しない」」という画面になり、それ以上できません。 なぜなんでしょうか。 //void dis(char *b){ //     printf("%s\n", *b); //} void main(){      char a[] = "pipi"; //    dis(a);      printf("%s\n", a); } どなたか教えていただけないでしょうか。お願いしますm(_ _)m

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

  • ベストアンサー
回答No.3

dis()関数内での、b の使い方が間違っています。 printf() における "%s" 指示子には文字列へのポインタを指定しなければなりません。 アナタの書き方だと、ポインタbが指している文字を printf() に渡していますが、printf()はソレが文字列へのポインタであると解釈して、ポインタの中身を見ようとします。しかし、アナタが渡した文字の値の範囲は-128-127であり、そんな低位アドレスへアクセスすることはできませんので、結果セグメント違反を起こしてクラッシュするのです。 printf("%s\n", b) と書いてください。

dra2jp
質問者

お礼

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

その他の回答 (2)

回答No.2

次のひとです(笑) ポインタは宣言は*var,使用はvarの形になります。 使用するときに*varとすると,ポインタの指している値の参照になります。

dra2jp
質問者

お礼

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

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

printf("%s\n", *b); を、 printf("%s\n", b); にしてください。 理由は、、多分、次の人が説明してくれるでしょう。

dra2jp
質問者

お礼

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

関連するQ&A