【问题标题】:Variable length space using printf使用 printf 的可变长度空间
【发布时间】:2010-07-09 16:50:58
【问题描述】:

我正在尝试格式化一些 printf 语句以允许任意级别的缩进。 理想情况下,我想要以下输出,其中“一”、“二”等是可变长度日志消息的占位符。

One
 Two
  Three
 Two
One

我正在研究缩进所需的可变长度间距,我知道我可以做到以下几点:

printf( "%*s", indent_level, "" );

但我想知道是否有办法在没有第二个空字符串 arg 的情况下做到这一点。

【问题讨论】:

    标签: c printf


    【解决方案1】:

    您可以将要打印的内容作为参数传递:

    printf( "%*s", indent_level + strlen(mystr), mystr );
    

    【讨论】:

    • 好建议,但输出字符串的长度也是可变的:printf("%*s%d, %d, %d, %s, CONSTANT CHARS, %p\n", indent_level, "", ... );在不使用中间缓冲区的情况下确定该字符串的长度是很痛苦的。
    • 您只需要知道第一个参数的长度 - 例如你可以使用 printf("%*d, %d, ...", indent_level, param1, ... )
    • 我第一次看到 printf 的那种用法,你能解释一下为什么你使用 indent_level+strlen(mystr) 吗?
    • 来自 printf 的手册页:字段宽度:一个可选的十进制数字字符串(第一个数字非零),指定最小字段宽度。代替十进制数字字符串,可以写“*”或“*m$”(对于一些十进制整数 m)来指定字段宽度在下一个参数中给出。
    • @adamk 嗯,我不知道 printf( "%*d", indent_level, param ) 如何做我想做的事。
    【解决方案2】:

    由于某种原因无法发表评论,因此作为单独的 necro-answer 发布。

    >> "当然,如果第一个参数也是变长的,那么 这对你不起作用”

    > 是的,就是这样;它需要能够处理数字 值作为第一个参数。

    你可以使用哑字符串

    printf ("%*s%d", indent_level, "", decimal);
    

    为了缩进可变长度小数。有点笨拙,但可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多