_itoa_s
, _ltoa_s
, _ultoa_s
, _i64toa_s
, _ui64toa_s
, _itow_s
, _ltow_s
, _ultow_s
, , _i64tow_s
_ui64tow_s
Convierte un entero en cadena. Estas funciones son versiones de , _itoa
_itow
funciones con mejoras de seguridad, como se describe en Características de seguridad de CRT.
Sintaxis
errno_t _itoa_s( int value, char * buffer, size_t size, int radix );
errno_t _ltoa_s( long value, char * buffer, size_t size, int radix );
errno_t _ultoa_s( unsigned long value, char * buffer, size_t size, int radix );
errno_t _i64toa_s( long long value, char *buffer,
size_t size, int radix );
errno_t _ui64toa_s( unsigned long long value, char *buffer,
size_t size, int radix );
errno_t _itow_s( int value, wchar_t *buffer,
size_t size, int radix );
errno_t _ltow_s( long value, wchar_t *buffer,
size_t size, int radix );
errno_t _ultow_s( unsigned long value, wchar_t *buffer,
size_t size, int radix );
errno_t _i64tow_s( long long value, wchar_t *buffer,
size_t size, int radix );
errno_t _ui64tow_s( unsigned long long value, wchar_t *buffer,
size_t size, int radix
);
// These template functions are C++ only:
template <size_t size>
errno_t _itoa_s( int value, char (&buffer)[size], int radix );
template <size_t size>
errno_t _ltoa_s( long value, char (&buffer)[size], int radix );
template <size_t size>
errno_t _ultoa_s( unsigned long value, char (&buffer)[size], int radix );
template <size_t size>
errno_t _itow_s( int value, wchar_t (&buffer)[size], int radix );
template <size_t size>
errno_t _ltow_s( long value, wchar_t (&buffer)[size], int radix );
template <size_t size>
errno_t _ultow_s( unsigned long value, wchar_t (&buffer)[size], int radix );
Parámetros
value
Número que se va a convertir.
buffer
Búfer de salida que contiene el resultado de la conversión.
size
Tamaño de buffer
en caracteres o caracteres anchos.
radix
Base numérica o base que se va a usar para convertir value
, que debe estar en el intervalo de 2 a 36.
Valor devuelto
Devuelve cero si se ejecuta correctamente; devuelve un código de error si se produce un error. Si se aplica alguna de las condiciones siguientes, la función invoca un controlador de parámetros no válidos, como se describe en Validación de parámetros.
Condiciones del error
value | buffer | size | radix | Return |
---|---|---|---|---|
cualquiera | NULL |
cualquiera | cualquiera | EINVAL |
cualquiera | cualquiera | <=0 | cualquiera | EINVAL |
cualquiera | cualquiera | <= longitud de la cadena de resultados necesaria | cualquiera | EINVAL |
cualquiera | cualquiera | cualquiera | radix < 2 o radix > 36 |
EINVAL |
Problemas de seguridad
Estas funciones pueden generar una infracción de acceso si buffer
no apunta a la memoria válida y no NULL
es , o si la longitud del búfer no es lo suficientemente larga como para contener la cadena de resultado.
Comentarios
Salvo por los parámetros y el valor devuelto, las familias de funciones _itoa_s
e _itow_s
tienen el mismo comportamiento que las versiones _itoa
e _itow
menos seguras correspondientes.
En C++, el uso de estas funciones se simplifica con las sobrecargas de plantilla; las sobrecargas pueden realizar una inferencia automáticamente de la longitud de búfer (lo que elimina el requisito de especificar un argumento de tamaño) y pueden reemplazar automáticamente funciones anteriores no seguras con sus homólogos seguros más recientes. Para obtener más información, consulte Sobrecargas de plantilla seguras.
Las versiones de la biblioteca de depuración de estas funciones rellenan primero el búfer con 0xFE. Para deshabilitar este comportamiento, use _CrtSetDebugFillThreshold
.
CRT incluye macros convenientes para definir el tamaño del búfer necesario para convertir el valor más largo posible de cada tipo entero, incluido el terminador nulo y el carácter de signo, para varias bases comunes. Para obtener información, consulte Macros de recuento máximo de conversiones.
De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.
Asignaciones de rutinas de texto genérico
Rutina Tchar.h |
_UNICODE y _MBCS no definidos |
_MBCS definido |
_UNICODE definido |
---|---|---|---|
_itot_s |
_itoa_s |
_itoa_s |
_itow_s |
_ltot_s |
_ltoa_s |
_ltoa_s |
_ltow_s |
_ultot_s |
_ultoa_s |
_ultoa_s |
_ultow_s |
_i64tot_s |
_i64toa_s |
_i64toa_s |
_i64tow_s |
_ui64tot_s |
_ui64toa_s |
_ui64toa_s |
_ui64tow_s |
Requisitos
Routine | Encabezado necesario |
---|---|
_itoa_s , _ltoa_s , _ultoa_s , , _i64toa_s , _ui64toa_s |
<stdlib.h> |
_itow_s , _ltow_s , _ultow_s , , _i64tow_s , _ui64tow_s |
<stdlib.h> o <wchar.h> |
Estas funciones son específicas de Microsoft. Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Ejemplo
En este ejemplo se muestra el uso de algunas de las funciones de conversión de enteros. La _countof
macro solo funciona para determinar el tamaño del búfer cuando la declaración de matriz es visible para el compilador y no para los parámetros que se han descaído en punteros.
// crt_itoa_s.c
// Compile by using: cl /W4 crt_itoa_s.c
#include <stdlib.h> // for _itoa_s functions, _countof, count macro
#include <stdio.h> // for printf
#include <string.h> // for strnlen
int main( void )
{
char buffer[_MAX_U64TOSTR_BASE2_COUNT];
int r;
for ( r = 10; r >= 2; --r )
{
_itoa_s( -1, buffer, _countof(buffer), r );
printf( "base %d: %s (%d chars)\n",
r, buffer, strnlen(buffer, _countof(buffer)) );
}
printf( "\n" );
for ( r = 10; r >= 2; --r )
{
_i64toa_s( -1LL, buffer, _countof(buffer), r );
printf( "base %d: %s (%d chars)\n",
r, buffer, strnlen(buffer, _countof(buffer)) );
}
printf( "\n" );
for ( r = 10; r >= 2; --r )
{
_ui64toa_s( 0xffffffffffffffffULL, buffer, _countof(buffer), r );
printf( "base %d: %s (%d chars)\n",
r, buffer, strnlen(buffer, _countof(buffer)) );
}
}
base 10: -1 (2 chars)
base 9: 12068657453 (11 chars)
base 8: 37777777777 (11 chars)
base 7: 211301422353 (12 chars)
base 6: 1550104015503 (13 chars)
base 5: 32244002423140 (14 chars)
base 4: 3333333333333333 (16 chars)
base 3: 102002022201221111210 (21 chars)
base 2: 11111111111111111111111111111111 (32 chars)
base 10: -1 (2 chars)
base 9: 145808576354216723756 (21 chars)
base 8: 1777777777777777777777 (22 chars)
base 7: 45012021522523134134601 (23 chars)
base 6: 3520522010102100444244423 (25 chars)
base 5: 2214220303114400424121122430 (28 chars)
base 4: 33333333333333333333333333333333 (32 chars)
base 3: 11112220022122120101211020120210210211220 (41 chars)
base 2: 1111111111111111111111111111111111111111111111111111111111111111 (64 chars)
base 10: 18446744073709551615 (20 chars)
base 9: 145808576354216723756 (21 chars)
base 8: 1777777777777777777777 (22 chars)
base 7: 45012021522523134134601 (23 chars)
base 6: 3520522010102100444244423 (25 chars)
base 5: 2214220303114400424121122430 (28 chars)
base 4: 33333333333333333333333333333333 (32 chars)
base 3: 11112220022122120101211020120210210211220 (41 chars)
base 2: 1111111111111111111111111111111111111111111111111111111111111111 (64 chars)