以编程方式安全地调整格式字符串中的小数位
Adjust the decimal places in a format string programatically and safely
我正在尝试找出在不打开不受控制的格式字符串漏洞的情况下处理 C 中动态更改格式字符串的最佳方法。
我在一个结构中有数据,其中包含浮点数和一个无符号整数,它对应于要打印的有效数字的数量。
我想使用整数即时生成格式字符串的精度,以便:
3
生成 "%.3g"
21
生成 "%.21g"
有没有一种安全的方法可以做到这一点而又不让我的代码受到攻击?
是的,你很幸运。您需要使用格式字符串中的精度字段。在那里,您可以提供一个 .*
符号并提供相应的整数参数来保存精度值。
您可以使用以下模式来实现这一点,例如 printf()
。
printf("%.*g", int_precision, decimal_to_print)
我正在尝试找出在不打开不受控制的格式字符串漏洞的情况下处理 C 中动态更改格式字符串的最佳方法。
我在一个结构中有数据,其中包含浮点数和一个无符号整数,它对应于要打印的有效数字的数量。
我想使用整数即时生成格式字符串的精度,以便:
3
生成 "%.3g"
21
生成 "%.21g"
有没有一种安全的方法可以做到这一点而又不让我的代码受到攻击?
是的,你很幸运。您需要使用格式字符串中的精度字段。在那里,您可以提供一个 .*
符号并提供相应的整数参数来保存精度值。
您可以使用以下模式来实现这一点,例如 printf()
。
printf("%.*g", int_precision, decimal_to_print)