C 如何转换字符数组中的浮点值

C 如何转换字符数组中的浮点值,c,C,如何将float值复制到c中的字符数组中?例如,float变量x=1.234被复制到char数组中,变成{'1'、'.'、'2'、'3'、'4'}最好使用snprintf而不是sprintf,它解决了许多缓冲区溢出的风险,当开发人员低估了所需的大小时,或者输入未完全验证 int status = snprintf(arr, sizeof(arr), "%.3f", val) ; ... Check overflow if needed ... if ( status >=

如何将
float
值复制到c中的字符数组中?例如,
float
变量
x=1.234
被复制到
char
数组中,变成
{'1'、'.'、'2'、'3'、'4'}

最好使用
snprintf
而不是
sprintf
,它解决了许多缓冲区溢出的风险,当开发人员低估了所需的大小时,或者输入未完全验证

   int status = snprintf(arr, sizeof(arr), "%.3f", val) ;
   ... Check overflow if needed ...
   if ( status >= sizeof(arr) ) {
       .. Overflow
   }

printf与原始stdio(gets,vsprintf)中的其他几个函数一样,依赖程序员创建足够大的缓冲区。

您可以使用
sprintf()
函数将您的
float
数字转换为
string
,例如:

char fnum_str[num]; // num is an integer number which large enough
int slen = sprintf(fnum_str,"%f",fnum); // fnum is your float number

现在,您的号码被转换为一个单独的字符
fnum\u str
数组。如果要将
double
的所有信息保存到字符串中,可以使用
fnum\u str[i]
访问该值, 使用足够宽的字符串和
s*printf()
以及
%a
%e
%g
格式说明符。它们使用文本浮点表示。不要使用
“%f”
(文本固定点),这对于较小的值来说是没有信息的,对于较大的值来说是过于冗长的

#include <float.h>
//                    -       hex digits         .   p   -  expo \0
#define DBL_HEX_SIZE (1 + (DBL_MANT_DIG + 3)/4 + 1 + 1 + 1 + 8 + 1)
char s[DBL_HEX_SIZE * 2];  // No need to be stingy on buffer sizes.

snprintf(s, sizeof s, "%a", some_double);
#包括
//-十六进制数字。p-expo\0
#定义DBL_十六进制大小(1+(DBL_MANT_DIG+3)/4+1+1+1+8+1)
字符s[DBL_十六进制大小*2];//不需要吝啬于缓冲区大小。
snprintf(s,s的大小,“%a”,一些双);
还是十进制

#include <float.h>
//                    - digit .   dec digits            e   -  expo \0
#define DBL_DEC_SIZE (1 + 1 + 1 + (DBL_DECIMAL_DIG-1) + 1 + 1 + 8 + 1)
char s[DBL_DEC_SIZE * 2];  // No need to be stingy on buffer sizes.

snprintf(s, sizeof s, "%.*e", DBL_DECIMAL_DIG-1, some_double);
#包括
//-数字。数字e-expo\0
#定义DBL_DEC_大小(1+1+1+(DBL_DECIMAL_DIG-1)+1+1+8+1)
字符s[DBL_DEC_SIZE*2];//不需要吝啬于缓冲区大小。
snprintf(s,sizeof s,“%.*e”,DBL\u DECIMAL\u DIG-1,一些双精度);

在新的字符数组中转换或复制它的详细信息使用
sprintf(arr,“%f”,x)
,具有足够大的
arr
。非常简单:
%f”
导致
“0.000000”
“-0.000000”
大约占所有可能的
双倍
的一半。不要用它来保存有关
double
的信息。