2012-05-05 11 views
12

me pregunto si lo hace:¿Cuál es el comportamiento del especificador de conversión `p` con el puntero` NULL`?

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

será siempre da (nil) de salida?

¿Depende de la implementación estándar de la biblioteca, o es una especificación estándar C99?

+5

creo que la norma no define lo que es la salida de printf para el formato 'p '%. Depende de la implementación. –

+0

Repaso esta pregunta porque las respuestas son incorrectas. Este es un problema para una pregunta de ~ 5000 vistas. – Stargateur

+0

@Stargateur: en camino a la insignia de nigromante? – chqrlie

Respuesta

18

En mi sistema produce (null), así que supongo que su implementación está definida. De manera más general, todo %p impresiones es definido por la implementación:

7.21.6.1

El argumento debe ser un puntero a void. El valor del puntero es convertido a una secuencia de caracteres de impresión, en una forma definida por la implementación .

5

Will always gives (nil)?

No, en absoluto. En mi máquina (Mac con i686-apple-darwin11-llvm-gcc-4.2) imprime 0x0.

Cuestiones relacionadas