Format
#include <stdlib.h> long double strtold(const char *nptr, char **endptr);
Language Level: Extension
strtold converts a character string to a long double value. The
parameter nptr points to a sequence of characters that
can be interpreted as a numerical value of the type long double.
When it reads a character that it does not recognize as part of a
number, strtold stops reading the string at that character, and
sets endptr to point to the remainder of nptr. The character at
which strtod stops reading the string may be the null character
at the end of that string.
The string pointed to by nptr must have the following format:

The digits are one or more decimal digits. If no digits appear before the decimal point, at least one digit must follow the decimal point. An exponent expressed as a decimal integer can follow the digits. The exponent can be signed.
The value of nptr can also be one of the strings infinity, inf, or nan. These strings are case insensitive, and can be preceded by a unary minus (-). They are converted to infinity and NaN values.
If the string pointed to by nptr does not have the expected form, no conversion is performed and endptr points to the value of nptr.
Return Value
If successful, strtold returns the value of the long
double number. If it fails, strtold returns 0. For an underflow
or overflow, it returns the following:
| Condition | Return Value |
| Underflow | 0 with errno set to ERANGE |
| Positive overflow | +_LHUGE_VAL |
| Negative overflow | -_LHUGE_VAL. |
Example
This example uses strtold to convert two strings, "
-001234.5678e10end of string" and "NaNthis cannot be
converted" to their corresponding long double values. It
also prints out the part of the string that cannot be converted.
#include <stdlib.h> #include <stdio.h>
int main(void)
{
char *nptr;
char *endptr;
nptr = " -001234.5678e10end of string";
printf("strtold = %.10Le\n", strtold(nptr, &endptr));
printf("end pointer at = %s\n\n", endptr);
nptr = "NaNthis cannot be converted";
printf("strtold = %.10Le\n", strtold(nptr, &endptr));
printf("end pointer at = %s\n\n", endptr);
return 0;
/***************************************************
The output should be:
strtold = -1.2345678000e+13
end pointer at = end of string
strtold = nan
end pointer at = this cannot be converted
***************************************************/
}
![]()
atof -- Convert Character String to Float
atoi -- Convert Character String to
Integer
atol -- Convert Character String to Long
Double
_atold -- Convert Character String to
Long Double
strtod -- Convert Character String to
Double
strtol -- Convert Character String to
Long Integer
strtoul -- Convert String Segment to
Unsigned Integer
wcstod -- Convert Wide-Character
String to Double
wcstol -- Convert Wide-Character to
Long Integer
wcstoul -- Convert Wide-Character
String to Unsigned Long
<stdlib.h>