2010-02-08 9 views
5

Pendant que je travaille, quelque part dans le code, j'ai vu les éléments suivants. Je vous sentir désorienté spécificateur de format dans sprintfSpécificateur de format 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 ); 

pourrait expliquer tout le monde s'il vous plaît?

+1

@qrdl: et c'est utile comment, exactement? Vous avez peut-être manqué le mémo, mais SO n'a jamais été conçu comme un simple lien vers Google. Il était destiné à contenir des réponses aux questions de programmation grandes et petites. Si vous n'avez rien d'utile à contribuer, ne vous embêtez pas à commenter. – jalf

+2

@jalf Le premier résultat est un article de Wikipédia sur printf, qui répertorie tous les spécificateurs de format et les paramètres de largeur. J'espère que cela répond à vos questions sur la serviabilité de mon commentaire. Je crois fermement que la capacité de trouver l'information est l'une des qualités les plus fortes d'un bon programmeur (comme n'importe quel ingénieur), donc je préfère donner une canne à pêche, plutôt que du poisson. Je suis fier d'être programmeur et je n'aime pas les gens qui déprécient mon métier. Ouais, et s'il vous plaît assurez-vous que je reçois une autre copie de ce mémo, M. Lumbergh. – qrdl

+0

@qdrl: C'est le cas. Votre commentaire n'a pas été utile. L'un des objectifs déclarés du SO est de fournir des réponses * sans * dire aux gens de le google. Mais dites-moi, pourquoi est-ce que cela "déprécie votre métier" si les gens vont à stackoverflow.com et tapez "spécificateurs de format printf", mais cela vaut la peine et complètement différent s'ils vont sur google ou wikipedia et font exactement la même chose? Je dirais que la marque d'un bon programmeur est d'aller sur un site * pertinent * pour chercher des informations. Pour les questions de programmation, SO est un site plus pertinent que wikipedia, n'est-ce pas? – jalf

Répondre

0

L '* est remplacé par (int) sizeof (dec_number). Si dec_number est un int, sur de nombreuses machines, c'est la même chose que% 0.4d. C'est la précision avec laquelle imprimer l'entier ou le nombre maximum de chiffres à imprimer.

Le * peut apparaître sur chaque côté du, par exemple "":

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

fonctionne également.

Questions connexes