0

cでchar型のポインタを出力しようとしています。値とそのメモリアドレスは次のように表示されます。

     char *ptr = "I am a string"; 

     printf("\n  value [%s]\n",ptr);
     printf("\n  address [%d]\n",&ptr);

しかし、以下のようにポインタを直接印刷すると、次のようなエラーが表示されますSegmentation fault

     char *ptr = "I am a string"; 

     printf("\n  value [%s]\n",*ptr);

ここで何が問題になっているのか教えてください

注:printfのフォーマットを[%d]または[%i]に変更すると、印刷されます。

4

3 に答える 3

4

*ptrはcharであり、charポインタではなく、%scharポインタ(C文字列への)を必要とします。charをポインタとして扱う場合printf、無効なメモリアドレスにアクセスしようとすると、セグメンテーション違反が発生します。

于 2012-05-02T14:53:01.690 に答える
3

フォーマット指定子は、0で終了する配列への%sポインターを想定しています。charに対応する引数printf*ptr、aのchar場合、つまりa)未定義の動作であり、b)おそらく文字の値(に昇格int)と、場合によっては任意の隣接バイトにつながり、ポインタとして解釈されます。その推定ポインタに続いて、プログラムに割り当てられていないメモリにアクセスする可能性があります。

于 2012-05-02T14:54:05.897 に答える
1

フォーマット"%s"をに渡すとprintf、関数はsの配列へのポインターを期待しますchar

于 2012-05-02T14:53:30.730 に答える