2010-07-09 84 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); 

。有點笨重,但有效。