2012-09-27 22 views
5

El siguiente código me da la salida como 'd':C "% d" especificador de formato

void main() 
{ 

    short int a=5; 

    printf("%d"+1,a); 

    getch(); 

} 

¿Cómo printf() trabajar realmente?

+0

http://kkmaterials.blogspot.in/2012/06/printf-function-questions-and-answer.html Creo que se ha formulado la misma pregunta aquí. Intenta buscar tus preguntas antes de preguntar aquí. que publicar las preguntas con los mismos valores que este sitio, no significa que haya hecho ninguna tarea. –

Respuesta

6

printf no lo hace "ver" el especificador de formato porque está pasando un puntero a "%d" más uno. Esto es similar al traspaso de "d" por sí mismo:

printf("d", a); 

imprimirá d e ignorar a. Esto no es específico de printf, la aritmética de punteros funciona de la misma manera que con todos los punteros char, incluidos los punteros obtenidos a partir de literales de cadena (es decir, secuencias de caracteres de doble cita).

3

aquí es el problema printf("%d"+1,a); no lo puedo mostrar porque no es sólo un formato especificador y esto ("% d" 1) generar errores

puede ser printf("%d+1",a); o printf("%d",a+1);

1

literales de cadena tales como "% d" son expresiones matriz, y en la mayoría de contextos una expresión de matriz serán convertidos a una expresión puntero cuyo valor es la dirección del primer elemento de la matriz:

 
Item  Address  00 01 02 03 
-----  -------  -- -- -- -- 
"%d"  0xfffbec00  '%' 'd' 0 ?? 

La cadena literal "% d" comienza en la dirección 0xfffbec00 (por ejemplo). Al escribir "%d"+1, está agregando 1 al valor del puntero resultante (dando 0xfffbec01), por lo que efectivamente está pasando la cadena literal "d" a printf.

Dado que la cadena "d" no contiene un especificador de formato, printf imprime la cadena tal como está. El argumento a es evaluado antes de pasarse a printf, pero de lo contrario se ignora.

Cuestiones relacionadas