_itoa_s
, _ltoa_s
, , _ultoa_s
, _ui64toa_s
_i64toa_s
, _itow_s
_ltow_s
_ultow_s
, , _i64tow_s
_ui64tow_s
Převede celé číslo na řetězec. Tyto funkce jsou verze funkcí s _itow
vylepšeními zabezpečení, jak je popsáno v funkcích zabezpečení v CRT._itoa
Syntaxe
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
Číslo, které se má převést.
buffer
Výstupní vyrovnávací paměť, která obsahuje výsledek převodu.
size
Velikost znaků nebo širokých buffer
znaků
radix
Radix nebo číselná základna, která se má použít k převodu value
, která musí být v rozsahu 2-36.
Vrácená hodnota
Nula v případě úspěchu; kód chyby při selhání. Pokud platí některá z následujících podmínek, funkce vyvolá neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru.
Chybové podmínky
hodnota | vyrovnávací paměť | size | základ | Zpět |
---|---|---|---|---|
jakékoliv | NULL |
jakékoliv | jakékoliv | EINVAL |
jakékoliv | jakékoliv | <=0 | jakékoliv | EINVAL |
jakékoliv | jakékoliv | <= délka požadovaného výsledného řetězce | jakékoliv | EINVAL |
jakékoliv | jakékoliv | jakékoliv | radix < 2 nebo radix > 36 |
EINVAL |
Problémy se zabezpečením
Tyto funkce můžou vygenerovat porušení přístupu, pokud buffer
neodkazuje na platnou paměť a není NULL
, nebo pokud délka vyrovnávací paměti není dostatečně dlouhá, aby mohl obsahovat výsledný řetězec.
Poznámky
S výjimkou parametrů a návratové hodnoty _itoa_s
_itow_s
mají rodiny funkcí stejné chování jako odpovídající méně zabezpečené _itoa
a _itow
verze.
V jazyce C++ je použití těchto funkcí zjednodušeno přetíženími šablon; přetížení mohou automaticky odvodit délku vyrovnávací paměti (eliminuje potřebu zadat argument velikosti) a mohou automaticky nahradit starší, nezabezpečené funkce jejich novějšími zabezpečenými protějšky. Další informace naleznete v tématu Přetížení šablon zabezpečení.
Verze knihovny ladění těchto funkcí nejprve vyplní vyrovnávací paměť 0xFE. Chcete-li toto chování zakázat, použijte _CrtSetDebugFillThreshold
.
CRT obsahuje praktická makra pro definování velikosti vyrovnávací paměti potřebné k převodu nejdelší možné hodnoty každého typu celého čísla, včetně ukončovací a znaku null pro několik společných bází. Informace naleznete v tématu Maximální počet převodu maker.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Mapování rutin obecného textu
Tchar.h rutina |
_UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_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 |
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
_itoa_s , _ltoa_s , _ultoa_s , , _i64toa_s _ui64toa_s |
<stdlib.h> |
_itow_s , _ltow_s , _ultow_s , , _i64tow_s _ui64tow_s |
<stdlib.h> nebo <wchar.h> |
Tyto funkce jsou specifické pro Microsoft. Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
Tato ukázka ukazuje použití několika celočíselné převodní funkce. Makro _countof
funguje pouze pro určení velikosti vyrovnávací paměti, pokud je deklarace pole viditelná kompilátoru, a ne pro parametry, které se rozložily na ukazatele.
// 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)