itoa
、 _itoa
、 ltoa
、 _ltoa
、 ultoa
、 _ultoa
、 _i64toa
、 _ui64toa
、 _itow
、 _ltow
、 _ultow
、 _i64tow
、 _ui64tow
整数を文字列に変換します。 これらの関数のセキュリティを強化したバージョンを使用できます。「_itoa_s
、_itow_s
関数」を参照してください。
構文
char * _itoa( int value, char *buffer, int radix );
char * _ltoa( long value, char *buffer, int radix );
char * _ultoa( unsigned long value, char *buffer, int radix );
char * _i64toa( long long value, char *buffer, int radix );
char * _ui64toa( unsigned long long value, char *buffer, int radix );
wchar_t * _itow( int value, wchar_t *buffer, int radix );
wchar_t * _ltow( long value, wchar_t *buffer, int radix );
wchar_t * _ultow( unsigned long value, wchar_t *buffer, int radix );
wchar_t * _i64tow( long long value, wchar_t *buffer, int radix );
wchar_t * _ui64tow( unsigned long long value, wchar_t *buffer, int radix );
// These POSIX versions of the functions have deprecated names:
char * itoa( int value, char *buffer, int radix );
char * ltoa( long value, char *buffer, int radix );
char * ultoa( unsigned long value, char *buffer, int radix );
// The following template functions are C++ only:
template <size_t size>
char *_itoa( int value, char (&buffer)[size], int radix );
template <size_t size>
char *_itoa( long value, char (&buffer)[size], int radix );
template <size_t size>
char *_itoa( unsigned long value, char (&buffer)[size], int radix );
template <size_t size>
char *_i64toa( long long value, char (&buffer)[size], int radix );
template <size_t size>
char * _ui64toa( unsigned long long value, char (&buffer)[size], int radix );
template <size_t size>
wchar_t * _itow( int value, wchar_t (&buffer)[size], int radix );
template <size_t size>
wchar_t * _ltow( long value, wchar_t (&buffer)[size], int radix );
template <size_t size>
wchar_t * _ultow( unsigned long value, wchar_t (&buffer)[size], int radix );
template <size_t size>
wchar_t * _i64tow( long long value, wchar_t (&buffer)[size], int radix );
template <size_t size>
wchar_t * _ui64tow( unsigned long long value, wchar_t (&buffer)[size],
int radix );
パラメーター
value
変換される数値。
buffer
変換の結果を保持するバッファー。
radix
value
の変換に使用する基数。2 から 36 の範囲内である必要があります。
size
文字型の単位でのバッファーの長さ。 このパラメーターは、C++ の buffer
引数から推論されます。
戻り値
これらの各関数は、buffer
へのポインターを返します。 エラーの戻り値はありません。
解説
_itoa
、_ltoa
、_ultoa
、_i64toa
、_ui64toa
の各関数では、指定された value
引数の数字を null で終了する文字列に変換し、その結果 (_itoa
、_ltoa
、_ultoa
の場合は最大 33 文字、_i64toa
と _ui64toa
の場合は最大 65 文字) を buffer
に保存します。 radix
が 10 で、value
が負の値の場合、格納されている文字列の最初の文字は負符号 (-) です。 _itow
、_ltow
、_ultow
、_i64tow
、_ui64tow
の関数は、それぞれ _itoa
、_ltoa
、_ultoa
、_i64toa
、_ui64toa
のワイド文字バージョンです。
重要
これらの関数では、小さすぎるバッファーの末尾を越えて書き込むことがあります。 バッファー オーバーランを防ぐには、変換された数字と末尾の null 文字と符号文字を保持するのに十分な大きさの buffer
を確保します。 これらの関数を誤用すると、コードに重大なセキュリティ上の問題が発生する可能性があります。
セキュリティ上の問題が発生する可能性があるため、既定では、これらの関数によって非推奨の警告 "C4996: この関数または変数は安全でない可能性があります。代わりに safe_function
を使用することを検討してください。使用されなくなったことの警告を無効にするには、_CRT_SECURE_NO_WARNINGS
を使用します。" が表示されます。警告メッセージによって提案された safe_function
を使用するようにソース コードを変更することをお勧めします。 より安全な関数では、指定されたバッファー サイズよりも多くの文字が書き込まれません。 詳細については、「_itoa_s
、_itow_s
関数」を参照してください。
非推奨の警告を発生させずにこれらの関数を使用するには、CRT ヘッダーを含める前に _CRT_SECURE_NO_WARNINGS
プリプロセッサ マクロを定義します。 これを定義するには、 /D_CRT_SECURE_NO_WARNINGS
コンパイラ オプションを cl
コマンドに追加します。 それ以外の場合は、ソース ファイルでマクロを定義します。 プリコンパイル済みヘッダーを使用する場合は、プリコンパイル済みヘッダーのインクルード ファイル pch.h
(Visual Studio 2017 以前では stdafx.h
) の先頭にマクロを定義します。 ソース コードでマクロを定義するには、次の例のように、CRT ヘッダーを含める前に #define
ディレクティブを使用します。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
C++ では、これらの関数には、より安全なバージョンを呼び出すテンプレート オーバーロードがあります。 詳細については、「セキュリティ保護されたテンプレート オーバーロード」を参照してください。
既定では、これらの関数のグローバル状態はアプリケーションにスコープが設定されます。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
POSIX 名 itoa
、ltoa
、ultoa
は、_itoa
、_ltoa
、_ultoa
関数のエイリアスとして存在します。 POSIX 名は、ISO C の実装固有のグローバル関数名規則に従っていないため、非推奨とされます。既定では、これらの関数は非推奨の警告 C4996: この項目の POSIX 名は非推奨です。代わりに、ISO C および C++ 準拠の名前: new_name
を使用します。 これらの関数のより安全なバージョンである _itoa_s
、_ltoa_s
、または _ultoa_s
を使用するようにソース コードを変更することをお勧めします。 詳細については、「_itoa_s
、_itow_s
関数」を参照してください。
ソース コードの移植性を確保するために、コードで POSIX 名を保持することもできます。 非推奨の警告を発生させずにこれらの関数を使用するには、CRT ヘッダーを含める前に _CRT_NONSTDC_NO_WARNINGS
と _CRT_SECURE_NO_WARNINGS
の両方のプリプロセッサ マクロを定義します。 cl
コマンドに/D_CRT_SECURE_NO_WARNINGS
および/D_CRT_NONSTDC_NO_WARNINGS
コンパイラ オプションを追加することで、それらを定義できます。 それ以外の場合は、ソース ファイルでマクロを定義します。 プリコンパイル済みヘッダーを使用する場合は、プリコンパイル済みヘッダーのインクルード ファイルの先頭にマクロを定義します。 ソース コードでマクロを定義するには、次の例のように、CRT ヘッダーを含める前に #define
ディレクティブを使用します。
#define _CRT_NONSTDC_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
最大変換カウント マクロ
セキュリティで保護された変換用バッファーを作成できるように、CRT には便利なマクロがいくつか用意されています。 これらのマクロは、複数の共通ベースに対して、null ターミネータや符号文字など、各整数型の可能な限り長い値を変換するために必要なバッファーのサイズを定義します。 変換バッファーが、radix
によって指定された基数で変換を受け取るのに十分な大きさであることを確認するには、バッファーを割り当てるときに、これらの定義済みマクロのいずれかを使用します。 このマクロは、整数型を文字列に変換するときにバッファー オーバーラン エラーを防ぐのに役立ちます。 これらのマクロは、ソースに stdlib.h または wchar.h を含めるときに定義されます。
文字列変換関数でこれらのマクロの 1 つを使用するには、適切な文字型の変換バッファーを宣言し、整数型と基数のマクロ値をバッファーの次元として使用します。 次の表に、一覧表示されている基数の関数ごとに適したマクロを示します。
関数 | radix | マクロ |
---|---|---|
_itoa , _itow |
16 10 8 2 |
_MAX_ITOSTR_BASE16_COUNT _MAX_ITOSTR_BASE10_COUNT _MAX_ITOSTR_BASE8_COUNT _MAX_ITOSTR_BASE2_COUNT |
_ltoa , _ltow |
16 10 8 2 |
_MAX_LTOSTR_BASE16_COUNT _MAX_LTOSTR_BASE10_COUNT _MAX_LTOSTR_BASE8_COUNT _MAX_LTOSTR_BASE2_COUNT |
_ultoa , _ultow |
16 10 8 2 |
_MAX_ULTOSTR_BASE16_COUNT _MAX_ULTOSTR_BASE10_COUNT _MAX_ULTOSTR_BASE8_COUNT _MAX_ULTOSTR_BASE2_COUNT |
_i64toa , _i64tow |
16 10 8 2 |
_MAX_I64TOSTR_BASE16_COUNT _MAX_I64TOSTR_BASE10_COUNT _MAX_I64TOSTR_BASE8_COUNT _MAX_I64TOSTR_BASE2_COUNT |
_ui64toa , _ui64tow |
16 10 8 2 |
_MAX_U64TOSTR_BASE16_COUNT _MAX_U64TOSTR_BASE10_COUNT _MAX_U64TOSTR_BASE8_COUNT _MAX_U64TOSTR_BASE2_COUNT |
この例では、変換カウント マクロを使用して、基数 2 に unsigned long long
を格納するのに十分な大きさのバッファーを定義します。
#include <wchar.h>
#include <iostream>
int main()
{
wchar_t buffer[_MAX_U64TOSTR_BASE2_COUNT];
std:wcout << _ui64tow(0xFFFFFFFFFFFFFFFFull, buffer, 2) << std::endl;
}
汎用テキスト ルーチンのマップ
Tchar.h ルーチン |
_UNICODE と _MBCS が定義されていない |
_MBCS が定義されている |
_UNICODE が定義されている |
---|---|---|---|
_itot |
_itoa |
_itoa |
_itow |
_ltot |
_ltoa |
_ltoa |
_ltow |
_ultot |
_ultoa |
_ultoa |
_ultow |
_i64tot |
_i64toa |
_i64toa |
_i64tow |
_ui64tot |
_ui64toa |
_ui64toa |
_ui64tow |
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
itoa 、 ltoa 、 ultoa |
<stdlib.h> |
_itoa 、 _ltoa 、 _ultoa 、 _i64toa 、 _ui64toa |
<stdlib.h> |
_itow 、 _ltow 、 _ultow 、 _i64tow 、 _ui64tow |
<stdlib.h> または <wchar.h> |
これらの関数とマクロは Microsoft 固有です。 互換性の詳細については、「 Compatibility」を参照してください。
例
このサンプルでは、いくつかの整数変換関数の使用方法を示します。 _CRT_SECURE_NO_WARNINGS
マクロを使用して警告 C4996 をサイレント状態にすることに注目してください。
// crt_itoa.c
// Compile by using: cl /W4 crt_itoa.c
// This program makes use of the _itoa functions
// in various examples.
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h> // for printf
#include <string.h> // for strnlen
#include <stdlib.h> // for _countof, _itoa fns, _MAX_COUNT macros
int main(void)
{
char buffer[_MAX_U64TOSTR_BASE2_COUNT];
int r;
for (r = 10; r >= 2; --r)
{
_itoa(-1, buffer, r);
printf("base %d: %s (%d chars)\n", r, buffer,
strnlen(buffer, _countof(buffer)));
}
printf("\n");
for (r = 10; r >= 2; --r)
{
_i64toa(-1LL, buffer, r);
printf("base %d: %s (%d chars)\n", r, buffer,
strnlen(buffer, _countof(buffer)));
}
printf("\n");
for (r = 10; r >= 2; --r)
{
_ui64toa(0xffffffffffffffffULL, 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)