2013-10-25 50 views
1

我正在瀏覽printf函數的手冊頁,並且我遇到了一個聲明,它解釋了在格式字符串中使用$(我其實並不很瞭解)。然後我試着尋找一些例子,但是我找不到可以解釋它在函數中的用法的好例子。

任何人都可以提供一個簡單的例子,可以解釋在任何格式化的輸出功能$的用法?

回答

3

$格式的動機是事實上,有時當您將數字插入到已翻譯的字符串中時,插入的順序隨語言而改變。爲了能夠只使用一個轉換格式字符串,而無需知道這些值的順序,這是必要的格式字符串本身標出插入順序:

// Simplified example, with thanks to Google translate for the azerbaijani. 

const char* buy_book[NL] = { 
    [fmt_en] = "You can buy %d books for %d dollars.\n", 
    [fmt_az] = "Siz %2$d dollar %1$d kitab ala bil\u0259rsiniz.\n", 
    // ... 
}; 

void bookoffer(enum Lang variant, int books, int dollars) { 
    printf(buy_book[variant], books, dollars); 
} 

有時是有用的重複格式化值; $可以不必提供原來的兩倍,爲您節省:

printf("The value at offset %1$d (0x%1$X) is %2$d (0x%2$X)\n", addr, value); 

您還可以使用$值指定爲*精度:

printf("The first %1$d characters of the string are '%2$.*1$s'.\n", 
     nchar, str); 
+0

謝謝!這個例子很好地解釋了它。 –