【问题标题】:Adjust the decimal places in a format string programatically and safely [duplicate]以编程方式安全地调整格式字符串中的小数位[重复]
【发布时间】:2015-07-08 17:27:33
【问题描述】:

我正在尝试找出在 C 中动态更改格式字符串而不打开不受控制的格式字符串漏洞的最佳方法。

我在一个结构中有数据,其中包含浮点数和一个无符号整数,它对应于打印的有效数字的数量。

我想使用整数动态生成格式字符串的精度,以便:

3 生成"%.3g"

21 生成"%.21g"

有没有一种安全的方法可以做到这一点,而无需将我的代码开放给漏洞利用?

【问题讨论】:

  • 显然我的搜索失败了。
  • C 不是秘密科学,所以它在 printf() 的文档中。我知道手册页是“巨大的”......

标签: c floating-point printf floating-point-precision format-string


【解决方案1】:

是的,你很幸运。您需要使用格式字符串中的精度字段。在那里,您可以提供.* 表示法并提供相应的整数参数来保存精度值。

您可以使用以下模式来实现这一点,例如 printf()

 printf("%.*g", int_precision, decimal_to_print)

【讨论】:

    猜你喜欢
    • 2012-12-31
    • 2011-01-12
    • 2016-09-28
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多