2010-07-09 72 views
9

我想格式化一些printf语句以允许任意级别的缩进。 理想情况下,我需要以下输出,其中“一”,“两”等是可变长度日志消息的占位符。使用printf的可变长度空间

One 
Two 
    Three 
Two 
One 

我工作的压痕所需的可变长度的间距,我知道我能做到以下几点:

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

,但我不知道是否有办法做到这一点不第二个空字符串arg。

回答

16

您只需通过选择要打印输出什么参数:

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

很好的建议,但输出字符串也是可变长度的: printf(“%* s%d,%d,%d,%s,CONSTANT CHARS,%p \ n”,indent_level,“”,。 ..); 在不使用中间缓冲区的情况下确定该字符串的长度是一种痛苦。 – bvanvugt 2010-07-09 17:04:43

+0

您只需要知道第一个参数的长度 - 例如你可以使用printf(“%* d,%d,...”,indent_level,param1,...) – adamk 2010-07-09 17:32:07

+0

我第一次使用printf类型的用法,你能解释你为什么使用indent_level + strlen(mystr )? – 2010-07-09 17:39:34

1

无法写入由于某种原因,评论,所以张贴作为一个单独的死灵回答。

>>“当然,如果第一个参数也变长,则 这不会为你工作”

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

您可以依次缩进可变长度小数使用哑弹弦

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

。有点笨重,但有效。