C especificador de formato
-
19-09-2019 - |
Pregunta
Mientras trabajo, en algún lugar dentro del código vi los siguientes staements.
Me estoy confundido por el especificador de formato en sprintf
d_number = strtol( tmp_buf , (char **)NULL, 16);
memset( tmp_buf , ' ' , sizeof( tmp_buf ) );
sprintf( tmp_buf , "%0.*d" , (int)sizeof( dec_number ) , d_number );
podría alguien explicar por favor?
Solución
.*
significa la precisión no se especifica en la cadena de formato, sino como un argumento adicional valor entero que precede al argumento de que tiene que ser formateado. (D_number)
http://www.cplusplus.com/reference/clibrary/cstdio/ printf /
Otros consejos
El * se sustituye por (int) sizeof (dec_number). Si dec_number es un int, en muchas máquinas es el mismo que el 0.4D%. Este es el precisión con el que se imprime el número entero o el número máximo de dígitos a imprimir.
El * puede aparecer en cualquier lado de la, por ejemplo "":
sprintf(tmp_buf, "%*.*", 0, (int)sizeof(dec_number), d_number);
también funciona.