_itoa_s
, _ltoa_s
, , , _ui64toa_s
_i64tow_s
_i64toa_s
_itow_s
_ltow_s
_ultow_s
_ultoa_s
_ui64tow_s
Konwertuje liczbę całkowitą na ciąg. Te funkcje to wersje funkcji , _itow
z ulepszeniami zabezpieczeń zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT. _itoa
Składnia
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 );
Parametry
value
Liczba do przekonwertowania.
buffer
Bufor wyjściowy, który przechowuje wynik konwersji.
size
buffer
Rozmiar znaków lub znaków szerokich.
radix
Radix lub podstawa liczbowa, która ma być używana do konwersji value
, która musi znajdować się w zakresie 2–36.
Wartość zwracana
Zero w przypadku powodzenia; kod błędu dotyczący błędu. Jeśli którykolwiek z poniższych warunków ma zastosowanie, funkcja wywołuje nieprawidłową procedurę obsługi parametrów zgodnie z opisem w temacie Weryfikacja parametrów.
Warunki błędu
wartość | bufor | size | podstawa | Powrót |
---|---|---|---|---|
dowolny | NULL |
dowolny | dowolny | EINVAL |
dowolny | dowolny | <=0 | dowolny | EINVAL |
dowolny | dowolny | <= wymagana długość ciągu wynikowego | dowolny | EINVAL |
dowolny | dowolny | dowolny | radix < 2 lub radix > 36 |
EINVAL |
Problemy z zabezpieczeniami
Te funkcje mogą generować naruszenie dostępu, jeśli buffer
nie wskazuje prawidłowej pamięci i nie NULL
ma wartości , lub jeśli długość buforu nie jest wystarczająco długa, aby przechowywać ciąg wynikowy.
Uwagi
Z wyjątkiem parametrów i wartości _itoa_s
zwracanych rodziny funkcji i _itow_s
mają takie samo zachowanie jak odpowiadające im mniej bezpieczne _itoa
i _itow
wersje.
W języku C++używanie tych funkcji jest uproszczone przez przeciążenia szablonu; przeciążenia mogą automatycznie wnioskować długość buforu (eliminując konieczność określenia argumentu rozmiaru) i mogą automatycznie zastępować starsze, niezabezpieczone funkcje nowszymi, bezpiecznymi odpowiednikami. Aby uzyskać więcej informacji, zobacz Bezpieczne przeciążenia szablonów.
Wersje biblioteki debugowania tych funkcji najpierw wypełniają bufor 0xFE. Aby wyłączyć to zachowanie, użyj polecenia _CrtSetDebugFillThreshold
.
Funkcja CRT zawiera wygodne makra do definiowania rozmiaru buforu wymaganego do przekonwertowania najdłuższej możliwej wartości każdego typu liczby całkowitej, w tym znaku zakończenia o wartości null i znaku dla kilku typowych podstaw. Aby uzyskać informacje, zobacz Maksymalna liczba makr konwersji.
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Mapowania procedur tekstu ogólnego
Tchar.h rutyna |
_UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_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 |
Wymagania
Procedura | Wymagany nagłówek |
---|---|
_itoa_s , , _ltoa_s , _ultoa_s , , _i64toa_s _ui64toa_s |
<stdlib.h> |
_itow_s , , _ltow_s , _ultow_s , , _i64tow_s _ui64tow_s |
<stdlib.h> lub <wchar.h> |
Te funkcje są specyficzne dla firmy Microsoft. Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
W tym przykładzie pokazano użycie kilku funkcji konwersji całkowitej. Makro _countof
działa tylko w celu określenia rozmiaru buforu, gdy deklaracja tablicy jest widoczna dla kompilatora, a nie dla parametrów, które uległy rozkładowi do wskaźników.
// 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)