【问题标题】:Use of $ in formatted output functions在格式化输出函数中使用 $
【发布时间】:2013-10-25 00:19:56
【问题描述】:

我在浏览printf 函数的手册页时遇到了一个声明,其中解释了在格式字符串中使用 $ (实际上我不太了解)。然后我试图为此寻找一些示例,但我无法找到可以解释其在函数中的用法的好示例。

谁能提供一个简单的例子来解释 $ 在任何格式化输出函数中的用法?

【问题讨论】:

    标签: c printf string-formatting


    【解决方案1】:

    $ 格式的动机是,有时当您将数字插入到已翻译的字符串中时,插入的顺序会随语言而变化。为了能够只使用已翻译的格式字符串而不必知道值的顺序,格式字符串本身必须标记插入顺序:

    // 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);
    

    【讨论】:

    • 谢谢!这个例子很好地解释了它。
    猜你喜欢
    • 1970-01-01
    • 2016-11-21
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多