_itoa_s、_ltoa_s、_ultoa_s、_i64toa_s、_ui64toa_s、、_ltow_s、_ultow_s、_i64tow_s、_ui64tow_s_itoa_s, _ltoa_s, _ultoa_s, _i64toa_s, _ui64toa_s, _itow_s, _ltow_s, _ultow_s, _i64tow_s, _ui64tow_s

整数を文字列に変換します。Converts an integer to a string. これらは、「 CRT のセキュリティ機能」で説明されているように、セキュリティが強化されたバージョンの機能です。These are versions of the _itoa, _itow functions with security enhancements as described in Security Features in the CRT.

構文Syntax

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 );

パラメーターParameters

valuevalue
変換される数値。Number to be converted.

バッファーbuffer
変換の結果を保持する出力バッファー。Output buffer that holds the result of the conversion.

sizesize
バッファーのサイズ (文字またはワイド文字単位)。Size of buffer in characters or wide characters.

radixradix
の変換に使用する基数または数値の基数。2-36 の範囲内である必要があります。The radix or numeric base to use to convert value, which must be in the range 2-36.

戻り値Return value

正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。Zero if successful; an error code on failure. 次のいずれかの条件が適用される場合は、「パラメーターの検証」で説明されているように、関数によって無効なパラメーター ハンドラーが呼び出されます。If any of the following conditions applies, the function invokes an invalid parameter handler, as described in Parameter Validation.

エラー条件Error conditions

value bufferbuffer sizesize radixradix ReturnReturn
任意any NULLNULL 任意any 任意any EINVALEINVAL
任意any 任意any <=0<=0 任意any EINVALEINVAL
任意any 任意any <= 結果の文字列の長さが必要<= length of the result string required 任意any EINVALEINVAL
任意any 任意any 任意any 基数< 2 または基数> 36radix < 2 or radix > 36 EINVALEINVAL

セキュリティの問題Security issues

バッファーが有効なメモリを指しておらず、 NULLでない場合、またはバッファーの長さが結果の文字列を保持するのに十分ではない場合、これらの関数はアクセス違反を生成することがあります。These functions can generate an access violation if buffer does not point to valid memory and is not NULL, or if the length of the buffer is not long enough to hold the result string.

RemarksRemarks

パラメーターと戻り値を除いて、_itoa_s関数と関数ファミリの動作は、対応する低セキュリティのバージョン (_t ) と同じです。Except for the parameters and return value, the _itoa_s and _itow_s function families have the same behavior as the corresponding less secure _itoa and _itow versions.

C++ では、これらの関数の使用はテンプレートのオーバーロードによって簡素化されます。オーバーロードでは、バッファー長を自動的に推論できる (サイズの引数を指定する必要がなくなる) だけでなく、古くてセキュリティが万全ではない関数を新しく安全な関数に自動的に置き換えることができます。In C++, using these functions is simplified by template overloads; the overloads can infer buffer length automatically (eliminating the need to specify a size argument) and they can automatically replace older, non-secure functions with their newer, secure counterparts. 詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。For more information, see Secure Template Overloads.

これらの関数のデバッグライブラリバージョンは、最初にバッファーを0xFE で埋めます。The debug library versions of these functions first fill the buffer with 0xFE. この動作を無効にするには、_CrtSetDebugFillThreshold を使用します。To disable this behavior, use _CrtSetDebugFillThreshold.

CRT には、いくつかの一般的な基本クラスについて、null 終端記号と符号文字を含む、各整数型の最大有効値を変換するために必要なバッファーのサイズを定義するための便利なマクロが含まれています。The CRT includes convenient macros to define the size of the buffer required to convert the longest possible value of each integer type, including the null terminator and sign character, for several common bases. 詳細については、「最大変換数マクロ」を参照してください。For information, see Maximum conversion count macros.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

Tchar.h のルーチンTchar.h routine _UNICODE および _MBCS が未定義の場合_UNICODE and _MBCS not defined _MBCS が定義されている場合_MBCS defined _UNICODE が定義されている場合_UNICODE defined
場所 (_s)_itot_s _itoa_s_itoa_s _itoa_s_itoa_s _itow_s_itow_s
_ltot_s_ltot_s _ltoa_s_ltoa_s _ltoa_s_ltoa_s _ltow_s_ltow_s
(_s)_ultot_s _ultoa_s_ultoa_s _ultoa_s_ultoa_s _ultow_s_ultow_s
_i64tot_s_i64tot_s _i64toa_s_i64toa_s _i64toa_s_i64toa_s _i64tow_s_i64tow_s
ui64_s (_s)_ui64tot_s _ui64toa_s_ui64toa_s _ui64toa_s_ui64toa_s _ui64tow_s_ui64tow_s

[要件]Requirements

ルーチンによって返される値Routine 必須ヘッダーRequired header
_itoa_s_ltoa_s_ultoa_s_i64toa_s_ui64toa_s_itoa_s, _ltoa_s, _ultoa_s, _i64toa_s, _ui64toa_s <stdlib.h><stdlib.h>
_ui64tow_s、 _ltow_s_ultow_s_i64tow_s_itow_s, _ltow_s, _ultow_s, _i64tow_s, _ui64tow_s <stdlib.h> または <wchar.h><stdlib.h> or <wchar.h>

これらの関数は、Microsoft 固有の関数です。These functions are Microsoft-specific. 互換性について詳しくは、「互換性」を参照してください。For more compatibility information, see Compatibility.

Example

このサンプルでは、いくつかの整数変換関数の使用方法を示します。This sample demonstrates the use of a few of the integer conversion functions. マクロの数は、配列宣言がコンパイラに表示される場合にのみバッファーサイズを決定することに注意してください。ポインターに decayed を持つパラメーターには使用できません。Note that the _countof macro only works to determine buffer size when the array declaration is visible to the compiler, and not for parameters that have decayed to pointers.

// 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)

関連項目See also

データ変換Data Conversion
itoa 関数 (_d)_itoa, _itow functions