NOMBRE¶
strtol, strtoll, strtoq - convierten una cadena en un entero de tipo long
SINOPSIS¶
#include <stdlib.h>
long int
strtol(const char *nptr, char **endptr, int base);
long long int
strtoll(const char *nptr, char **endptr, int base);
DESCRIPCIÓN¶
La función
strtol() convierte la parte inicial de la cadena de
entrada
nptr en un valor entero de tipo long de acuerdo a la
base dada, que debe estar entre 2 y 36 ambos incluidos o ser el valor
especial 0.
La cadena debe comenzar con una cantidad arbitraria de espacios en blanco, (tal
y como los define la función
isspace(3)) seguida por un
único y opcional signo `+' o `-'. Si la
base is 0 o 16, la
cadena puede incluir el prefijo `0x', y el número será
interpretado en base 16, en caso contrario la
base cero se toma como
base 10 (decimal), a menos que el carácter siguiente sea `0', en cuyo
caso se toma como base 8 (octal).
El resto de la cadena se convierte en un entero de tipo long de una forma
evidente, parándose la conversión en el primer carácter
que no es un dígito válido en la base dada. (En bases superiores
a 10, la letra `A' en mayúsculas o minúsculas representa el 10,
`B' representa el 11, y así sucesivamente, con la `Z' representando el
35.)
Si
endptr no es NULL,
strtol() almacena la dirección del
primer carácter no válido en
*endptr. Si no hubiera
dígitos en toda la cadena
strtol() almacena el valor original de
nptr en
*endptr. (y devuelve 0). En particular, si
*nptr
es distinto de `\0' pero
**endptr es `\0' a la vuelta, la cadena entera
es válida.
La función
strtoll() hace el mismo trabajo que la función
strtol() pero devuelve un valor entero de tipo long long.
VALOR DEVUELTO¶
La función
strtol() devuelve el resultado de la conversión,
a menos que el valor se desbordara por arriba o por abajo. Si ocurriera un
desbordamiento inferior,
strtol() devuelve LONG_MIN. Si ocurriera un
desbordamiento superior,
strtol() devuelve LONG_MAX. En ambos casos,
errno se establece a ERANGE. Precisamente lo mismo se aplica a
strtoll() (con LLONG_MIN y LLONG_MAX en lugar de LONG_MIN y LONG_MAX).
ERRORES¶
- ERANGE
- El valor resultante está fuera de rango.
- EINVAL
- (no está en C99) La base dada contiene un valor no
soportado.
La implementación puede poner también
errno a
EINVAL
en caso de que no se realice ninguna conversión (no se encuentren
dígitos, y se devuelva 0).
OBSERVACIONES¶
En otras localizaciones distintas a la localización "C", se
pueden aceptar también otras cadenas. (Por ejemplo, el separador de
miles de la localización actual puede estar soportado.)
BSD tiene también la función
quad_t
strtoq(const char *nptr, char **endptr, int base);
con una definición completamente análoga. Dependiendo del
tamaño de palabra de la arquitectura actual, ésta puede ser
equivalente a
strtoll() o a
strtol().
strtol() es conforme con SVID 3, BSD 4.3, ISO 9899 (C99) y POSIX, y
strtoll() es conforme con ISO 9899 (C99) y POSIX-2001.
VÉASE TAMBIÉN¶
atof(3),
atoi(3),
atol(3),
strtod(3),
strtoul(3)