我正在浏览printf函数的手册页,我遇到了一个声明,它解释了在格式字符串中使用$(实际上我不太了解)。然后我尝试为此寻找一些示例,但我无法找到可以解释其在函数中的用法的好示例。
谁能提供一个简单的例子来解释$在任何格式化输出函数中的用法?
我正在浏览printf函数的手册页,我遇到了一个声明,它解释了在格式字符串中使用$(实际上我不太了解)。然后我尝试为此寻找一些示例,但我无法找到可以解释其在函数中的用法的好示例。
谁能提供一个简单的例子来解释$在任何格式化输出函数中的用法?
格式的动机$
是这样一个事实,即有时当您将数字插入到已翻译的字符串中时,插入的顺序会随语言而变化。为了能够只使用已翻译的格式字符串而不必知道值的顺序,格式字符串本身必须标记插入顺序:
// 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);