2010-02-08 21 views
5

Mientras estoy trabajando, en algún lugar dentro del código vi los siguientes staements. me estoy confundido por el especificador de formato en sprintfespecificador de formato C

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?

+1

@qrdl: ¿y eso es útil cómo, exactamente? Es posible que se haya perdido la nota, pero SO nunca fue un simple enlace a Google. Tenía la intención de contener respuestas a preguntas de programación grandes y pequeñas. Si no tiene nada útil para contribuir, no se moleste en comentar. – jalf

+2

@jalf El primer golpe es al artículo de Wikipedia sobre printf, y enumera todos los especificadores de formato y parámetros de ancho. Espero que esto responda a sus preguntas sobre la utilidad de mi comentario. Creo firmemente que la capacidad de encontrar información es una de las cualidades más sólidas de un buen programador (como cualquier ingeniero), por lo que prefiero dar una caña de pescar, en lugar de pescar. Estoy orgulloso de ser programador y no me gustan las personas que abaratan mi oficio. Sí, y por favor asegúrense de obtener otra copia de esa nota, Sr. Lumbergh. – qrdl

+0

@qdrl: Sí. Tu comentario no fue útil. Uno de los objetivos declarados de SO es proporcionar respuestas * sin * decirle a las personas que lo busquen en google. Pero dime, ¿por qué está "abaratando tu oficio" si las personas van a stackoverflow.com y escriben "especificadores de formato printf", pero vale la pena y es completamente diferente si van a google o wikipedia y hacen * exactamente * lo mismo? Diría que el sello distintivo de un buen programador es ir a un sitio * relevante * para buscar información. Para preguntas de programación, SO es un sitio más relevante que wikipedia, ¿no? – jalf

Respuesta

0

El * se sustituye por (int) sizeof (dec_number). Si dec_number es un int, en muchas máquinas es igual a% 0.4d. Esta es la precisión con la que se imprime el número entero o el número máximo de dígitos para imprimir.

El * puede aparecer en cualquier lado de la, por ejemplo "":

sprintf(tmp_buf, "%*.*", 0, (int)sizeof(dec_number), d_number); 

también funciona.

Cuestiones relacionadas