Provided by: manpages-es-dev_4.18.1-1_all bug

NOMBRE

       strtol, strtoll, strtoq - convierten una cadena en un entero de tipo long

BIBLIOTECA

       Biblioteca Estándar C (libc, -lc)

SINOPSIS

       #include <stdlib.h>

       long strtol(const char *restrict nptr,
                   char **restrict endptr, int base);
       long long strtoll(const char *restrict nptr,
                   char **restrict endptr, int base);

   Requisitos de Macros de Prueba de Características para glibc (véase feature_test_macros(7)):

       strtoll():
           _ISOC99_SOURCE
               || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

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.

       The string may begin with an arbitrary amount of white space (as determined by isspace(3))
       followed by a single optional '+' or '-' sign.  If base is zero or 16, the string may then
       include  a  "0x" or "0X" prefix, and the number will be read in base 16; otherwise, a zero
       base is taken as 10 (decimal) unless the next character is '0', in which case it is  taken
       as 8 (octal).

       The  remainder  of the string is converted to a long value in the obvious manner, stopping
       at the first character which is not a valid digit in the given base.  (In bases above  10,
       the  letter  'A' in either uppercase or lowercase represents 10, 'B' represents 11, and so
       forth, with 'Z' representing 35.)

       If endptr is not NULL, strtol()  stores the address of  the  first  invalid  character  in
       *endptr.   If  there were no digits at all, strtol()  stores the original value of nptr in
       *endptr (and returns 0).  In particular, if *nptr is not '\0'  but  **endptr  is  '\0'  on
       return, the entire string is valid.

       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

       EINVAL (no está en C99)  La base dada contiene un valor no soportado.

       ERANGE El valor resultante está fuera de rango.

       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).

ATRIBUTOS

       Para obtener una explicación de los términos usados en esta sección, véase attributes(7).

       ┌──────────────────────┬────────────────────┬─────────────────────────────────────────────┐
       │InterfazAtributoValor                                       │
       ├──────────────────────┼────────────────────┼─────────────────────────────────────────────┤
       │strtol(), strtoll(),  │ Seguridad del hilo │ Configuración regional de multi-hilo seguro │
       │strtoq()              │                    │                                             │
       └──────────────────────┴────────────────────┴─────────────────────────────────────────────┘

ESTÁNDARES

       strtol(): POSIX.1-2001, POSIX.1-2008, C99 SVr4, 4.3BSD.

       strtoll(): POSIX.1-2001, POSIX.1-2008, C99.

NOTAS

       Since strtol()  can legitimately return 0, LONG_MAX, or LONG_MIN (LLONG_MAX  or  LLONG_MIN
       for  strtoll())   on  both  success and failure, the calling program should set errno to 0
       before the call, and then determine if an error occurred by checking whether errno  has  a
       nonzero value after the call.

       According  to  POSIX.1,  in locales other than "C" and "POSIX", these functions may accept
       other, implementation-defined numeric strings.

       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().

EJEMPLOS

       The program shown below demonstrates the use of strtol().  The first command-line argument
       specifies a string from which strtol()  should parse  a  number.   The  second  (optional)
       argument specifies the base to be used for the conversion.  (This argument is converted to
       numeric form using atoi(3), a function that performs no error checking and has  a  simpler
       interface  than  strtol().)  Some examples of the results produced by this program are the
       following:

           $ ./a.out 123
           strtol() returned 123
           $ ./a.out '    123'
           strtol() returned 123
           $ ./a.out 123abc
           strtol() returned 123
           Further characters after number: "abc"
           $ ./a.out 123abc 55
           strtol: Invalid argument
           $ ./a.out ''
           No digits were found
           $ ./a.out 4000000000
           strtol: Numerical result out of range

   Código fuente

       #include <errno.h>
       #include <limits.h>
       #include <stdio.h>
       #include <stdlib.h>

       int
       main(int argc, char *argv[])
       {
           int base;
           char *endptr, *str;
           long val;

           if (argc < 2) {
               fprintf(stderr, "Usage: %s str [base]\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           str = argv[1];
           base = (argc > 2) ? atoi(argv[2]) : 0;

           errno = 0;    /* Para dstinguir éxito/error después de invocar */
           val = strtol(str, &endptr, base);

           /* Prueba varios posibles errores. */

           if (errno != 0) {
               perror("strtol");
               exit(EXIT_FAILURE);
           }

           if (endptr == str) {
               fprintf(stderr, "No digits were found\n");
               exit(EXIT_FAILURE);
           }

           /* If we got here, strtol() successfully parsed a number. */

           printf("strtol() returned %ld\n", val);

           if (*endptr != '\0')        /* Not necessarily an error... */
               printf("Further characters after number: \"%s\"\n", endptr);

           exit(EXIT_SUCCESS);
       }

VÉASE TAMBIÉN

       atof(3), atoi(3), atol(3), strtod(3), strtoimax(3), strtoul(3)

TRADUCCIÓN

       La traducción al español de esta página del manual fue  creada  por  Carlos  Gomez  Romero
       <cgomez@databasedm.es>,   Miguel   Pérez   Ibars   <mpi79470@alu.um.es>  y  Marcos  Fouces
       <marcos@debian.org>

       Esta traducción es documentación libre; lea  la  GNU  General  Public  License  Version  3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  o posterior con respecto a las condiciones de
       copyright.  No existe NINGUNA RESPONSABILIDAD.

       Si encuentra algún error en la traducción de esta  página  del  manual,  envíe  un  correo
       electrónico a ⟨debian-l10n-spanish@lists.debian.org⟩.