在格式化输出函数中使用$

时间:2013-10-25 00:19:56

标签: c printf string-formatting

我正在阅读printf函数的手册页,我发现了一个声明,解释了在格式字符串中使用 $ (我实际上并不太了解)。然后我试着为此寻找一些例子,但我找不到可以解释它在函数中的用法的好例子。

任何人都可以提供一个简单的例子来解释任何格式化输出函数中 $ 的用法吗?

1 个答案:

答案 0 :(得分: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);