C格式说明符

5
当我在工作时,在代码的某个地方,我看到了以下语句。我对 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  );

可以有人解释一下吗?

1
@qrdl: 那有什么帮助呢?也许你错过了备忘录,但是SO从来不是一个简单的指向Google的链接。它旨在包含各种规模的编程问题的答案。如果你没有有用的贡献,请不要浪费时间发表评论。 - jalf
2
@jalf 第一个搜索结果是关于printf的维基百科文章,其中列出了所有格式说明符和宽度参数。我希望这回答了你对我的评论有多大帮助的问题。我坚信,能够找到信息是优秀程序员(像任何工程师一样)最强大的素质之一,因此我更喜欢给予渔竿而非鱼。我为自己是一名程序员感到自豪,不喜欢那些贬低我的手艺的人。是的,请确保我得到那份备忘录的另一份副本,Lumbergh先生。 - qrdl
@qdrl:确实如此。你的评论并没有帮助到任何人。SO 的一个明确目标就是提供答案,而不是告诉人们去谷歌搜索。但是请问,如果有人在 stackoverflow.com 上输入“printf 格式说明符”,为什么会“贬低你的技能”,但是如果他们去谷歌或维基百科做完全相同的事情,这就是值得的且完全不同的呢?我认为,一个好的程序员的标志就是去一个相关的网站寻找信息。对于编程问题,SO 比维基百科更相关,不是吗? - jalf
如果问题已经在SO上被问过了,那么请贴上链接,并告诉OP在提问之前先搜索一下网站。但是如果这个问题在这里还没有被问过,为什么不应该呢?引用FAQ的话,“没有问题太琐碎或者太“新手””。那么为什么寻找printf格式说明符信息的人不能在这个网站上找到答案呢? - jalf
@jalf 一旦像OP这样的人发现了SO,他们就不再投入时间学习东西,因为使用SO的集体智慧要容易得多。就我个人而言,我从不回答这样的问题,因为它闻起来像是刷声望。请告诉我 - 为什么我们不能在这里解决作业?那些太懒惰解决作业和自己懒得学习的人有什么区别?你真的认为这些人不会贬低我们的技艺吗? - qrdl
2个回答

6

0

星号“*”将被替换为(int)sizeof(dec_number)。如果dec_number是int类型,在许多机器上它就类似于%0.4d。这是打印整数或最大要打印的数字位数的“精度”。

星号“*”可以出现在“.”的任一侧,例如:

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

同样适用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接