strtof
函数 <cstdlib>
float strtof (const char* str, char** endptr);
将字符串转换为float
解析C-string str,将其内容解释为浮点数(根据当前地区),并以float形式返回其值。
如果endptr不是空指针,该函数还将endptr的值设置为指向数字后面的第一个字符。
函数丢弃所有开头的空格字符(如
isspace),直到找到第一个非空格字符。
然后,从这个字符开始,按照类似于浮点字面值的语法(见下面)取尽可能多的有效字符,
并将它们解释为数值。指向最后一个有效字符之后的字符串剩余部分的指针存储在endptr所指向的对象中。
使用“C”区域设置的strtof的有效浮点数由一个可选的符号字符(+或-)组成,后面跟着一个:
-
一个数字序列,可选包含一个小数点字符(.),可选后跟一个指数部分(e或E字符后跟一个可选符号和一个数字序列)。
-
一个0x或0X前缀,然后是一个十六进制数字序列(如isxdigit),可选地包含一个小数点,将整数和小数部分分开。
可选后跟2次幂(p或P字符后跟一个可选符号和一个十六进制数字序列)。
-
INF或INFINITY(忽略大小写)。
-
NAN或NANsequence(忽略大小写),其中sequence是字符序列,其中每个字符要么是字母数字字符(如isalnum),要么是下划线字符(_)。
如果str中的第一个非空格字符序列不构成刚才描述的有效浮点数,
或者由于str为空或只包含空格字符而不存在这样的序列,则不执行转换,函数返回一个0.0F。。
☲ 参数
str
以浮点数表示开头的c字符串。
endptr
对已经分配的char*类型对象的引用,该对象的值由函数设置为数值后的str中的下一个字符。
这个参数也可以是一个空指针,在这种情况下它不会被使用。
☉ 返回值
如果成功,该函数将转换后的浮点数作为 float类型的值返回。
如果不能执行有效的转换,则函数返回0(0.0F)。
如果正确的值超出了该类型的可表示值的范围,则返回一个正的或负的
HUGE_VAL,
并将
errno设置为ERANGE。
如果正确的值会导致下溢,则函数返回一个值,其大小不大于最小的标准化正数(在这种情况下,
一些库实现也可能将
errno设置为ERANGE)。
☣ 示例
/* strtof example */
#include <stdio.h> /* printf, NULL */
#include <stdlib.h> /* strtof */
int main ()
{
char szOrbits[] = "686.97 365.24";
char* pEnd;
float f1, f2;
f1 = strtof (szOrbits, &pEnd);
f2 = strtof (pEnd, NULL);
printf ("One martian year takes %.2f Earth years.\n", f1/f2);
return 0;
}
|
输出:
One martian year takes 1.88 Earth years.
↭ 数据竞争
str指向的数组被访问,endptr指向的指针被修改(如果不是null)。
❆ 异常(c++)
无抛出保证:此函数从不抛出异常。
如果str没有指向有效的C-string,或者endptr没有指向有效的指针对象,将导致未定义的行为。
🍄 另请参阅
strtol |
将字符串转换为long integer(function ) |
strtod |
将字符串转换为double (function ) |
atof |
将字符串转换为 double (function ) |