函数
<cstdlib>

strtold

long double strtold (const char* str, char** endptr);
将字符串转换为 long double
解析 C 字符串 str,将其内容(根据当前区域设置)解释为浮点数,并返回其 long double 类型的值。如果 endptr 不是空指针,该函数还会将 endptr 的值设置为指向数字后面的第一个字符。

此函数的操作类似于 strtod 来解释字符串,但会生成 long double 类型的数字(有关解释过程的详细信息,请参见 strtod)。

参数

str
以浮点数表示形式开头的 C 字符串。
endptr
对一个已分配的 char* 类型对象的引用,其值由函数设置为 str 中数值之后的下一个字符。
此参数也可以是空指针,此时它将不被使用。

返回值

成功后,函数将转换后的浮点数作为 long double 类型的值返回。
如果无法执行有效的转换,函数将返回零 (0.0L)。
如果正确的值超出了该类型可表示值的范围,则返回一个正或负的 HUGE_VALL,并且 errno 被设置为 ERANGE
如果正确的值会导致下溢,函数将返回一个其绝对值不大于最小规格化正数的值(某些库实现在这种情况下也可能将 errno 设置为 ERANGE)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* strtold example */
#include <stdio.h>      /* printf, NULL */
#include <stdlib.h>     /* strtold */

int main ()
{
  char szOrbits[] = "90613.305 365.24";
  char * pEnd;
  long double f1, f2;
  f1 = strtold (szOrbits, &pEnd);
  f2 = strtold (pEnd, NULL);
  printf ("Pluto takes %.2Lf years to complete an orbit.\n", f1/f2);
  return 0;
}

输出
Pluto takes 248.09 years to complete an orbit.


数据竞争

str 指向的数组被访问,endptr 指向的指针被修改(如果非空)。

异常 (C++)

无异常保证:此函数从不抛出异常。

如果 str 没有指向一个有效的 C 字符串,或者 endptr 没有指向一个有效的指针对象,将导致未定义行为

另见