2012-05-05 6 views
12

Zastanawiam się, czy nie:Jakie jest zachowanie specyfikatora konwersji `p` ze wskaźnikiem` NULL`?

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

zawsze daje (nil) wyjście?

Czy to zależy od standardowej implementacji biblioteki, czy jest to standardowa specyfikacja C99?

+5

Myślę, że standard nie określa, jaki jest wynik wydruku dla formatu "% p". To zależy od wdrożenia. –

+0

Przepracuję to pytanie, ponieważ odpowiedzi są błędne. To jest problem dla ~ 5000 wyświetleń pytania. – Stargateur

+0

@Stargateur: w drodze do odznaki nekromanty? – chqrlie

Odpowiedz

18

W moim systemie jest to (null), więc domyślam się, że jest to implementacja zdefiniowana. Mówiąc bardziej ogólnie, wszystko %p odbitki jest realizacja zdefiniowane:

7.21.6.1

argument powinien być wskaźnikiem do unieważnienia. Wartość wskaźnika to przekształcona w sekwencję znaków drukarskich, w sposób określony przez implementację .

5

Zawsze daje (zero)?

Wcale nie. Na moim komputerze (Mac z i686-apple-darwin11-llvm-gcc-4.2) wydrukuje on 0x0.