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

Adjust the decimal places in a format string programatically and safely

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

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

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

3 生成 "%.3g"

21 生成 "%.21g"

有没有一种安全的方法可以做到这一点而又不让我的代码受到攻击?

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

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

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