我想格式化一些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