.\" -*- coding: UTF-8 -*- '\" t .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH strtoll 3 "17 Mayo 2025" "Páginas de Manual de Linux 6.15" .SH NOMBRE strtol, strtoll, strtoq \- convierten una cadena en un entero de tipo long .SH BIBLIOTECA Biblioteca Estándar C (\fIlibc\fP,\ \fI\-lc\fP) .SH SINOPSIS .nf \fB#include \fP .P \fBlong strtol(const char *restrict \fP\fInptr\fP\fB,\fP \fB char **_Nullable restrict \fP\fIendptr\fP\fB, int \fP\fIbase\fP\fB);\fP \fBlong long strtoll(const char *restrict \fP\fInptr\fP\fB,\fP \fB char **_Nullable restrict \fP\fIendptr\fP\fB, int \fP\fIbase\fP\fB);\fP .fi .P .RS -4 Requisitos de Macros de Prueba de Características para glibc (véase \fBfeature_test_macros\fP(7)): .RE .P \fBstrtoll\fP(): .nf _ISOC99_SOURCE || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE .fi .SH DESCRIPCIÓN La función \fBstrtol\fP() convierte la parte inicial de la cadena de entrada \fInptr\fP en un valor entero de tipo long de acuerdo a la \fIbase\fP dada, que debe estar entre 2 y 36 ambos incluidos o ser el valor especial 0. .P La cadena puede comenzar con una cantidad arbitraria de espacios en blanco (según lo determinado por \fBisspace\fP(3)) seguido de un único signo opcional \[aq]+\[aq] o \[aq]\-\[aq]. Si \fIbase\fP es cero o 16, la cadena puede incluir un prefijo «0x» o «0X», y el número se leerá en base 16; si \fIbase\fP es cero o 2, la cadena puede incluir un prefijo «0b» o «0B», y el número se leerá en base 2. De lo contrario, un cero \fIbase\fP se toma como 10 (decimal), a menos que el siguiente carácter sea \[aq]0\[aq], en cuyo caso se toma como 8 (octal). .P El resto de la cadena se convierte a un valor \fIlong\fP de forma obvia, deteniéndose en el primer carácter que no sea un dígito válido en la base dada. (En bases superiores a 10, la letra \[aq]A\[aq], ya sea en mayúscula o minúscula, representa 10, \[aq]B\[aq] representa 11, y así sucesivamente, con \[aq]Z\[aq] representando 35). .P Si \fIendptr\fP no es NULL y se admite \fIbase\fP, \fBstrtol\fP() almacena la dirección del primer carácter no válido en \fI*endptr\fP. Si no hay dígitos, \fBstrtol\fP() almacena el valor original de \fInptr\fP en \fI*endptr\fP (y devuelve 0). En particular, si \fI*nptr\fP no es \[aq]\[rs]0\[aq] pero \fI**endptr\fP sí es \[aq]\[rs]0\[aq] al devolver, la cadena completa es válida. .P La función \fBstrtoll\fP() hace el mismo trabajo que la función \fBstrtol\fP() pero devuelve un valor entero de tipo \fIlong long\fP. .SH "VALOR DEVUELTO" La función \fBstrtol\fP() devuelve el resultado de la conversión, a menos que el valor se desbordara por arriba o por abajo. Si ocurriera un desbordamiento inferior, \fBstrtol\fP() devuelve \fBLONG_MIN\fP. Si ocurriera un desbordamiento superior, \fBstrtol\fP() devuelve \fBLONG_MAX\fP. En ambos casos, \fIerrno\fP se establece a \fBERANGE\fP. Precisamente lo mismo se aplica a \fBstrtoll\fP() (con \fBLLONG_MIN\fP y \fBLLONG_MAX\fP en lugar de \fBLONG_MIN\fP y \fBLONG_MAX\fP). .SH ERRORES Esta función no modifica \fIerrno\fP en caso de éxito. .TP \fBEINVAL\fP (no está en C99) La \fIbase\fP dada contiene un valor no soportado. .TP \fBERANGE\fP El valor resultante está fuera de rango. .P La implementación puede poner también \fIerrno\fP a \fBEINVAL\fP en caso de que no se realice ninguna conversión (no se encuentren dígitos, y se devuelva 0). .SH ATRIBUTOS Para obtener una explicación de los términos usados en esta sección, véase \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Interfaz Atributo Valor T{ .na .nh \fBstrtol\fP(), \fBstrtoll\fP(), \fBstrtoq\fP() T} Seguridad del hilo Configuración regional de multi\-hilo seguro .TE .SH VERSIONES Según POSIX.1, en configuraciones regionales distintas de «C» y «POSIX», estas funciones pueden aceptar otras cadenas numéricas definidas por la implementación. .P BSD tiene también la función .P .in +4n .EX \fBquad_t strtoq(const char *\fP\fInptr\fP\fB, char **\fP\fIendptr\fP\fB, int \fP\fIbase\fP\fB);\fP .EE .in .P con una definición completamente análoga. Dependiendo del tamaño de palabra de la arquitectura actual, ésta puede ser equivalente a \fBstrtoll\fP() o a \fBstrtol\fP(). .SH ESTÁNDARES C23, POSIX.1\-2024. .SH HISTORIAL .TP \fBstrtol\fP() POSIX.1\-2001, C89, SVr4, 4.3BSD. .TP \fBstrtoll\fP() POSIX.1\-2001, C99. .TP "0b", "0B" C23. glibc 2.38. (No en POSIX). .SH ADVERTENCIAS .SS "Comprobaciones de intervalo" Dado que \fBstrtol\fP() puede devolver legítimamente 0, \fBLONG_MAX\fP o \fBLONG_MIN\fP (\fBLLONG_MAX\fP o \fBLLONG_MIN\fP para \fBstrtoll\fP()) tanto en caso de éxito como de fracaso, el programa que realiza la llamada debe establecer \fIerrno\fP en 0 antes de la llamada y, a continuación, determinar si se ha producido un error comprobando si \fIerrno == ERANGE\fP después de la llamada. .P .in +4n .EX errno = 0; n = strtol(s, &end, base); if (end == s) goto no_number; if ((errno == ERANGE && n == LONG_MIN) || n < min) goto too_low; if ((errno == ERANGE && n == LONG_MAX) || n > max) goto too_high; .EE .in .SS base Si es necesario probar \fIbase\fP, debe hacerse en una llamada donde se sepa que la cadena se ejecuta correctamente. De lo contrario, es imposible diferenciar los errores de forma portable. .P .in +4n .EX errno = 0; strtol("0", NULL, base); if (errno == EINVAL) goto unsupported_base; .EE .in .SH ERRORES .SS "Espacio en blanco" Estas funciones aceptan espacios en blanco iniciales sin indicar nada. Para rechazarlos, llame a \fBisspace\fP(3) antes de \fBstrtol\fP(). .SH EJEMPLOS El programa que se muestra a continuación muestra el uso de \fBstrtol\fP(). El primer argumento de la línea de órdenes especifica una cadena desde la cual \fBstrtol\fP() debe analizar un número. El segundo argumento (opcional) especifica la base que se utilizará para la conversión. (Este argumento se convierte a formato numérico mediante \fBatoi\fP(3), una función que no realiza comprobación de errores y tiene una interfaz más sencilla que \fBstrtol\fP()). Algunos ejemplos de los resultados generados por este programa son los siguientes: .P .in +4n .EX $\fB ./a.out 123\fP strtol() returned 123 $\fB ./a.out \[aq] 123\[aq]\fP strtol() returned 123 $\fB ./a.out 123abc\fP strtol() returned 123 Further characters after number: "abc" $\fB ./a.out 123abc 55\fP strtol: Invalid argument $\fB ./a.out \[aq]\[aq]\fP No digits were found $\fB ./a.out 4000000000\fP strtol: Numerical result out of range .EE .in .SS "Código fuente" .\" SRC BEGIN (strtol.c) \& .EX #include #include #include \& int main(int argc, char *argv[]) { int base; char *endptr, *str; long val; \& if (argc < 2) { fprintf(stderr, "Usage: %s str [base]\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& str = argv[1]; base = (argc > 2) ? atoi(argv[2]) : 0; \& errno = 0; /* To distinguish success/failure after call */ strtol("0", NULL, base); if (errno == EINVAL) { perror("strtol"); exit(EXIT_FAILURE); } \& errno = 0; /* To distinguish success/failure after call */ val = strtol(str, &endptr, base); \& /* Check for various possible errors. */ \& if (errno == ERANGE) { perror("strtol"); exit(EXIT_FAILURE); } \& if (endptr == str) { fprintf(stderr, "No digits were found\[rs]n"); exit(EXIT_FAILURE); } \& /* If we got here, strtol() successfully parsed a number. */ \& printf("strtol() returned %ld\[rs]n", val); \& if (*endptr != \[aq]\[rs]0\[aq]) /* Not necessarily an error... */ printf("Further characters after number: \[rs]"%s\[rs]"\[rs]n", endptr); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "VÉASE TAMBIÉN" \fBatof\fP(3), \fBatoi\fP(3), \fBatol\fP(3), \fBstrtod\fP(3), \fBstrtoimax\fP(3), \fBstrtoul\fP(3) .PP .SH TRADUCCIÓN La traducción al español de esta página del manual fue creada por Carlos Gomez Romero , Miguel Pérez Ibars y Marcos Fouces . .PP Esta traducción es documentación libre; lea la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD. .PP Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a .MT debian-l10n-spanish@lists.debian.org .ME .