以编程方式安全地调整格式字符串中的小数位

时间:2015-07-08 17:27:34

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

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

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

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

3生成"%.3g"

21生成"%.21g"

有没有一种安全的方法可以在不打开我的代码的情况下执行此操作?

1 个答案:

答案 0 :(得分:1)

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

您可以使用以下模式来实现此目的,例如使用printf()

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