现在有没有人有最大的浮动范围?(我的意思是除了IEEE754或使用非常大的浮点表示的外来平台之外,还有其他规范吗)。
我想知道这一点,因为我从基于Semmle的分析仪上得到了这个错误:
sprintf(acKey, "Equity(0,%f)", dDate);
错误:此转换可能产生长度为328的字符串,超过分配的缓冲区大小200
其中,acKey是一个200大小的本地char数组。
谢谢
最佳答案
如果dDate
的值为-0x1.fffffffffffffp1023
,然后%f
格式说明符生成“—17976931348623157081452742373170435679805675258449565989917476803157260780858955863276687815404589535143824642343213268894812726846753537516986049105655128250624549009038932894407586850845133942304583236903229488085593321233482747782620472316873817718091998812504040261124858368.000000”,包含317个字符。将格式字符串中的其他10个字符和空终止符相加,将得到328个字符。-0x1.fffffffffffffp1023
是IEEE-754 64位二进制浮点中可表示的最大数量级有限负数。尽管它不是用格式化的十进制数所建议的精度来表示的,但它确实准确地表示了该数字。
(C标准允许有点不同的显示,例如在某一点以外显示零,而不是精确的数字。但是,显示的位数应相同。一个好的C实现将显示所有精确的数字。)