2010-02-08 166 views
5

虽然我在工作,但在代码内部的某处我看到了以下的步骤。 我对格式说明在sprintfC格式说明符

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 ); 

感到困惑可能有人解释一下吗?

+1

@qrdl:那有什么用呢?您可能错过了备忘录,但是SO从未打算成为Google的简单链接。它旨在包含大大小小的编程问题的答案。如果你没有什么有用的贡献,不要麻烦评论。 – jalf

+2

@jalf第一次打印是关于printf的维基百科文章,它列出了所有格式说明符和宽度参数。我希望这能回答你对我的评论有帮助的问题。我坚信,寻找信息的能力是优秀程序员最强大的素质之一(与任何工程师一样),所以我更喜欢钓鱼竿,而不是鱼。我为成为程序员而自豪,不喜欢那些贬低我的手艺的人。是的,请确保我收到另一份备忘录,Lumbergh先生。 – qrdl

+0

@qdrl:确实如此。您的评论没有帮助。所提出的目标之一就是提供答案*而不告诉别人谷歌它。但是告诉我,如果人们进入到stackoverflow.com并输入“printf格式说明符”,为什么它会“降低你的工艺”,但如果他们转到谷歌或维基百科并且执行*完全相同的事情,那么它是否值得和完全不同?我想说一个好程序员的标志是去一个相关的网站去寻找信息。对于编程问题,SO比维基百科更具有相关性,不是吗? – jalf

回答

0

中的*是由(int)取代的sizeof(dec_number)。如果dec_number是一个int,则在许多机器上它与%0.4d相同。这是用于打印整数或要打印的最大位数的精度

的*可以出现在的两边,例如 “”:

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

也适用。