我想格式化一些printf语句以允许任意级别的缩进。 理想情况下,我需要以下输出,其中“一”,“两”等是可变长度日志消息的占位符。使用printf的可变长度空间
One
Two
Three
Two
One
我工作的压痕所需的可变长度的间距,我知道我能做到以下几点:
printf("%*s", indent_level, "");
,但我不知道是否有办法做到这一点不第二个空字符串arg。
我想格式化一些printf语句以允许任意级别的缩进。 理想情况下,我需要以下输出,其中“一”,“两”等是可变长度日志消息的占位符。使用printf的可变长度空间
One
Two
Three
Two
One
我工作的压痕所需的可变长度的间距,我知道我能做到以下几点:
printf("%*s", indent_level, "");
,但我不知道是否有办法做到这一点不第二个空字符串arg。
您只需通过选择要打印输出什么参数:
printf("%*s", indent_level + strlen(mystr), mystr);
无法写入由于某种原因,评论,所以张贴作为一个单独的死灵回答。
>>“当然,如果第一个参数也变长,则 这不会为你工作”
>是啊,是这样的话;它需要能够处理数值为 的值作为第一个参数。
您可以依次缩进可变长度小数使用哑弹弦
printf ("%*s%d", indent_level, "", decimal);
。有点笨重,但有效。
很好的建议,但输出字符串也是可变长度的: printf(“%* s%d,%d,%d,%s,CONSTANT CHARS,%p \ n”,indent_level,“”,。 ..); 在不使用中间缓冲区的情况下确定该字符串的长度是一种痛苦。 – bvanvugt 2010-07-09 17:04:43
您只需要知道第一个参数的长度 - 例如你可以使用printf(“%* d,%d,...”,indent_level,param1,...) – adamk 2010-07-09 17:32:07
我第一次使用printf类型的用法,你能解释你为什么使用indent_level + strlen(mystr )? – 2010-07-09 17:39:34