Security Features in the CRT.
errno_t _itoa_s( int value, char *buffer, size_t sizeInCharacters, int radix ); errno_t _i64toa_s( __int64 value, char *buffer, size_t sizeInCharacters, int radix ); errno_t _ui64toa_s( unsigned _int64 value, char *buffer, size_t sizeInCharacters, int radix ); errno_t _itow_s( int value, wchar_t *buffer, size_t sizeInCharacters, int radix ); errno_t _i64tow_s( __int64 value, wchar_t *buffer, size_t sizeInCharacters, int radix ); errno_t _ui64tow_s( unsigned __int64 value, wchar_t *buffer, size_t sizeInCharacters, int radix ); template <size_t size> errno_t _itoa_s( int value, char (&buffer)[size], int radix ); // C++ only template <size_t size> errno_t _itow_s( int value, wchar_t (&buffer)[size], int radix ); // C++ only
Parameter Validation.
Error Conditions
|
value |
buffer |
sizeInCharacters |
radix |
Return |
|---|---|---|---|---|
|
any |
NULL |
any |
any |
EINVAL |
|
any |
any |
<=0 |
any |
EINVAL |
|
any |
any |
<= length of the result string required |
any |
EINVAL |
|
any |
any |
any |
radix > 36 |
EINVAL |
Security Issues
NULL, or if the length of the buffer is not long enough to hold the result string.
_itoa_s functions have the same behavior as the corresponding less secure versions.
Secure Template Overloads.
_CrtSetDebugFillThreshold.
Generic-Text Routine Mappings
|
Tchar.h routine |
_UNICODE and _MBCS not defined |
_MBCS defined |
_UNICODE defined |
|---|---|---|---|
|
_itot_s |
_itoa_s |
_itoa_s |
_itow_s |
|
_i64tot_s |
_i64toa_s |
_i64toa_s |
_i64tow_s |
|
_ui64tot_s |
_ui64toa_s |
_ui64toa_s |
_ui64tow_s |
// crt_itoa_s.c
#include <stdlib.h>
#include <string.h>
int main( void )
{
char buffer[65];
int r;
for( r=10; r>=2; --r )
{
_itoa_s( -1, buffer, 65, r );
printf( "base %d: %s (%d chars)\n", r, buffer, strnlen(buffer, _countof(buffer)) );
}
printf( "\n" );
for( r=10; r>=2; --r )
{
_i64toa_s( -1L, buffer, 65, r );
printf( "base %d: %s (%d chars)\n", r, buffer, strnlen(buffer, _countof(buffer)) );
}
printf( "\n" );
for( r=10; r>=2; --r )
{
_ui64toa_s( 0xffffffffffffffffL, buffer, 65, 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)