2012-05-05 7 views
12

ない場合、私は疑問に思う:`NULL`ポインタを持つ変換指定子` p`の動作は何ですか?

void *ptr = NULL; 
printf("%p\n", ptr); 

は常に(nil)出力を与えるのだろうか?

標準ライブラリの実装に依存するのか、それともC99標準仕様ですか?

+5

標準では、 '%p'形式のprintfの出力が何であるかを定義していないと思います。それは実装次第です。 –

+0

答えが間違っているので、私はこの質問を再作成します。これは〜5000回の閲覧に関する問題です。 – Stargateur

+0

@Stargateur:ネクロマンサーバッジへ行く途中で? – chqrlie

答えて

18

私のシステムでは、(null)が生成されるので、実装が定義していると思います。引数はvoidへのポインタでなければなら

7.21.6.1

:より一般的には、すべて%pプリントは実装定義です。ポインタの値は であり、実装定義の方法で の一連の印刷文字に変換されます。

5

いつも(nil)を与えますか?

全くありません。私のマシン(i686-apple-darwin11-llvm-gcc-4.2のMac)には、0x0が印刷されます。

関連する問題