strtol, strtoll
Defined in header
<stdlib.h>
|
||
long strtol( const char *str, char **str_end, int base );
|
(until C99) | |
long strtol( const char *restrict str, char **restrict str_end, int base );
|
(since C99) | |
long long strtoll( const char *restrict str, char **restrict str_end, int base );
|
(since C99) | |
Interprets an integer value in a byte string pointed to by str
.
Function discards any whitespace characters (as identified by calling isspace()
) until first non-whitespace character is found. Then it takes as many characters as possible to form a valid base-n (where n=base) integer number representation and converts them to an integer value. The valid integer value consists of the following parts:
- (optional) plus or minus sign
- (optional) prefix (
0
) indicating octal base (applies only when the base is 8 or 0) - (optional) prefix (
0x
or0X
) indicating hexadecimal base (applies only when the base is 16 or 0) - a sequence of digits
The set of valid digits for base-2 integer is 01
, for base-3 integer is 012
, and so on. For bases larger than 10
, valid digits include alphabetic characters, starting from Aa
for base-11 integer, to Zz
for base-36 integer. The case of the characters is ignored.
Additional numeric formats may be accepted by the currently installed C locale.
If the value of base is 0, the numeric base is auto-detected: if the prefix is 0
, the base is octal, if the prefix is 0x
or 0X
, the base is hexadecimal, otherwise the base is decimal.
The functions sets the pointer pointed to by str_end
to point to the character past the last character interpreted. If str_end
is NULL, it is ignored.
If the str
is empty or does not have the expected form, no conversion is performed, and (if str_end
is not NULL) the value of str
is stored in the object pointed to by str_end
.
Contents |
[edit] Parameters
str | - | pointer to the null-terminated byte string to be interpreted |
str_end | - | pointer to a pointer to character. |
base | - | base of the interpreted integer value |
[edit] Return value
- If successful, an integer value corresponding to the contents of
str
is returned. - If the converted value falls out of range of corresponding return type, a range error occurs (setting errno to ERANGE) and LONG_MAX, LONG_MIN, LLONG_MAX or LLONG_MIN is returned.
- If no conversion can be performed, 0 is returned.
[edit] Example
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> int main(void) { char str[] = "Is 0xff bigger than 0 or 0x00? The answer is 42."; int i = 0; int len = strlen(str); char *num; while (i < len) { long found = strtol(&str[i], &num, 0); if (errno) { perror("Error"); exit(EXIT_FAILURE); } else if (found || num != &str[i]) { printf("Found %li at position %d\n", found, i); i = num - str; } else { i++; } } /* Base 36 */ printf("\n%ld\n", strtol("XyZ",NULL,36)); /* Overflow (range error) */ errno = 0; printf("%ld\n", strtol("9223372036854775808",NULL,10)); // LONG_MAX+1 --> LONG_MAX printf("%s\n",strerror(errno)); // range error return 0; }
Output:
Found 255 at position 2 Found 0 at position 19 Found 0 at position 24 Found 42 at position 44 44027 9223372036854775807 Numerical result out of range
[edit] See also
converts a byte string to an integer value (function) |
|
converts a byte string to an unsigned integer value (function) |
|
C++ documentation for strtol, strtoll
|