【问题标题】:What is the meaning of "%-*.*s" in a printf format string?printf格式字符串中的“%-*.*s​​”是什么意思?
【发布时间】:2014-05-21 07:32:46
【问题描述】:
#define FMT "%-*.*s e = %6ld, chars = %7ld, stat = %3u: %c %c %c %c\n"

这个宏被传递给printf 函数。 %-*.*s 是什么意思?

【问题讨论】:

  • SO 并非旨在替代普通手册页。 printf 的格式说明符在此函数的任何手册页中都有描述。
  • 我从这个问题中学到了一些东西,所以向我 +1。
  • 我认为手册页很难理解以证明这个问题的合理性(我也学到了一些东西,可能是因为它不是 K&R printf 的一部分)。
  • 顺便说一句,格式不必是字符串文字;它可以是一个常规指针(例如char *fmt = "%d"; printf(fmt, 3);)。这意味着您也可以使用 sprintf 以编程方式组装它。它相当少见,但在需要时非常灵活。

标签: c printf


【解决方案1】:

您可以阅读manual page for printf。但它更像是法律文本而不是教程,所以很难理解。

我不知道*.*,必须自己阅读手册页。这真有趣。让我们从一个简单的printf("%s", "abc") 开始。它将打印字符串abc

printf("%8s", "abc") 将打印 abc,包括 5 个前导空格:8 是“字段宽度”。考虑一个具有列宽的数据表,以便同一列中的数据垂直对齐。数据默认右对齐,适合数字。

printf("%-8s", "abc") 将打印abc ,包括 5 个尾随空格:减号表示字段中的左对齐。

现在是明星: printf("%-*s", 8, "abc") 将打印相同的内容。星号表示字段宽度(此处:8)将作为参数传递给printf。这样就可以通过编程方式进行更改。

现在对于“精度”,即: printf("%-*.10s", 8, "1234567890123") 将只打印1234567890,省略最后三个字符:“精度”是字符串的最大字段宽度。这是数据被printf 截断的罕见情况之一(除了舍入,它也由精度值控制)。

最后 printf("%-*.*s", 8, 10, "1234567890123") 将像以前一样打印,但最大字段宽度也作为参数给出。

【讨论】:

  • 我刚刚写下了我的答案,因为我也不知道*.* 做了什么。你的回答是一个更好的解释。
猜你喜欢
  • 2022-04-08
  • 2011-12-15
  • 2021-10-06
  • 2018-08-03
  • 2018-08-28
  • 2010-11-03
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
相关资源
最近更新 更多