%g格式下float/double的最大字符串长度及栈分配数组大小问询
C语言中
%g格式化float/double的栈字符串最大长度 问题
- 问题1:使用
%g格式表示float类型时,对应的字符串最大长度是多少? - 问题2:为了存储任意float或double类型以
%g格式格式化后的结果,栈分配的字符串需要多大?
结论与说明
float类型
使用%g格式化float时,最长输出字符串来自极端值(如-FLT_MAX、极小非零值),不含终止符\0的最长字符数为15,加上终止符后需要16字节存储空间。因此栈分配的字符串数组大小设为16即可容纳所有可能的结果。
double类型
使用%lg(与%g等价)格式化double时,最长输出字符串来自-DBL_MAX或极小非零值,不含终止符的最长字符数为24,加上终止符后需要25字节存储空间。栈分配的字符串数组大小设为25即可覆盖所有情况。
注:该大小已考虑正负号、数字位、指数部分,同时兼容NaN(输出nan或-nan)、正负无穷(输出inf或-inf)等特殊值的存储需求,完全满足编译时确定大小、不依赖堆分配或变长数组(VLA)的要求。
代码示例
#include <stdio.h> #include <float.h> int main() { float f; double d; char f_str[16]; // 容纳float用%g格式化的所有结果(含终止符) char d_str[25]; // 容纳double用%lg格式化的所有结果(含终止符) sprintf(f_str, "%g", f); sprintf(d_str, "%lg", d); return 0; }
内容的提问来源于stack exchange,提问作者Abdulmalek Almkainzi
相关产品推荐
相关产品推荐

