_itoa_s
、 _ltoa_s
、 _ultoa_s
、 _i64toa_s
、 _ui64toa_s
、 _itow_s
、 _ltow_s
、 _ultow_s
、 _i64tow_s
、 _ui64tow_s
整数を文字列に変換します。 これらの関数は、CRT のセキュリティ機能で説明されているようにセキュリティが強化された_itoa
、_itow
関数のバージョンです。
構文
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 );
パラメーター
value
変換される数値。
buffer
変換の結果を保持する出力バッファー。
size
文字数またはワイド文字の buffer
のサイズ。
radix
value
を変換するために使用する基数または基数値。これは 2 から 36 の範囲である必要があります。
戻り値
正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。 次のいずれかの条件が適用される場合は、「パラメーターの検証で説明されているように、関数は無効なパラメーター ハンドラーを呼び出します。
エラー条件
値 | buffer | size | radix | 戻り値 |
---|---|---|---|---|
任意 | NULL |
任意 | 任意 | EINVAL |
任意 | 任意 | <=0 | 任意 | EINVAL |
任意 | 任意 | <= 結果の文字列の長さが必要 | 任意 | EINVAL |
任意 | 任意 | 任意 | radix < 2 または radix > 36 |
EINVAL |
セキュリティ上の問題
これらの関数は、 buffer
が有効なメモリを指していない場合や NULL
されていない場合、またはバッファーの長さが結果文字列を保持するのに十分な長さでない場合に、アクセス違反を生成する可能性があります。
解説
パラメーターと戻り値を除く _itoa_s
と _itow_s
関数ファミリには、_itoa
と _itow
のセキュリティ強化されていない対応バージョンと同じ動作があります。
C++ では、これらの関数の使用はテンプレートのオーバーロードによって簡素化されます。オーバーロードでは、バッファー長を自動的に推論できる (サイズの引数を指定する必要がなくなる) だけでなく、古くてセキュリティが万全ではない関数を新しく安全な関数に自動的に置き換えることができます。 詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。
これらの関数のデバッグ ライブラリ バージョンでは、最初にバッファーを 0xFE で埋めます。 この動作を無効にするには、_CrtSetDebugFillThreshold
を使用します。
CRT には、各整数型の可能な限り長い値を変換するために必要なバッファーのサイズを定義する便利なマクロが用意されています。これには、いくつかの一般的な基数の null 終端文字や符号文字も含まれます。 詳細については、「最大変換カウント マクロ」を参照してください。
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
汎用テキスト ルーチンのマップ
Tchar.h ルーチン |
_UNICODE と _MBCS が定義されていない |
_MBCS が定義されている |
_UNICODE が定義されている |
---|---|---|---|
_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 |
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
_itoa_s 、 _ltoa_s 、 _ultoa_s 、 _i64toa_s 、 _ui64toa_s |
<stdlib.h> |
_itow_s 、 _ltow_s 、 _ultow_s 、 _i64tow_s 、 _ui64tow_s |
<stdlib.h> または <wchar.h> |
これらの関数は Microsoft 固有です。 互換性の詳細については、「 Compatibility」を参照してください。
例
このサンプルでは、いくつかの整数変換関数の使用方法を示します。 _countof
マクロは、配列宣言がコンパイラから参照できる場合にのみバッファー サイズを決定し、ポインターに減衰したパラメーターには使用できません。
// 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)