2011-04-06 14 views

回答

5

它被用來操縱打印的數值的最小寬度,並且具體是指寬度不在格式字符串指定的,但作爲一個附加的整數值的論點,即必須是參數前述格式化。換句話說,如果你想使用存儲在變量中的寬度,你可以這樣做:

int width = /* something */; 
printf("%*d", width, value); 

編輯:哎呀!對於sprintf的正確的語法是:

sprintf(buffer, "%*d", width, value); 
+0

只有一句話:這是'printf()'的正確語法,但不是'sprintf()'的語法。 – 2011-04-06 03:20:34

+0

@Bavarious:犯罪!謝謝你的收穫。 – Jollymorphic 2011-04-06 03:23:56

1

它類似於%2d,其被「打印2長度整數」,除了長度被指定爲一個參數(不知道的順序)。 Reference

寬度未在格式字符串中指定,而是作爲必須格式化的參數前面的附加整數值參數指定。

3

在sprintf的情況下,這意味着您將傳遞兩個整數,一個指定字段寬度,另一個指定要轉換的值。

督察:

sprintf(buffer, "%5d", value); 

本質上是一樣的:

sprintf(buffer, "%*d", 5, value); 

,當你路過值寬度爲文字格式字符串很像,你可以指定一個寬度和一個精度如果你想要的,像這樣的事情:

sprintf(buffer, "%*.*d", 5, 2, value); 

還值得注意的是,與scanf和公司,一個「*」格式的字符串有完全不同的含義(用於將一些投入,但分配結果的任何東西)。

+0

+1徹底治療,包括'scanf'中的驚人差異。 – 2011-04-06 04:13:14

1

*表示在這種情況下整數的寬度或間距。 *爲一個佔位符,用於指定的寬度作爲參數要格式化的參數(在這種情況下,整數)

printf("The integer will be printed 10 spaces to the right: %*d", 10, 50); 
相關問題