_itoa_s、 _i64toa_s、 _ui64toa_s、 _itow_s、 _i64tow_s、 _ui64tow_s
將整數轉換成字串。 這些是舊版_itoa、 _i64toa、 _ui64toa、 _itow、 _i64tow、 _ui64tow中所述的安全性增強功能與安全性功能,則在 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
參數
[in] value
以指定須轉換的數字。[out] buffer
填滿轉換的結果。[in] sizeInCharacters
在單位元組字元或寬字元緩衝區的大小。[in] radix
Base of value; 這必須是範圍 2–36。
傳回值
如果成功 ;,零 錯誤碼錯誤所致。 如果下列條件會套用,函式叫用無效的參數處理常式中所述參數驗證。
錯誤狀況
值 |
緩衝區 |
sizeInCharacters |
基數 |
Return |
---|---|---|---|---|
任何 |
NULL |
任何 |
任何 |
EINVAL |
任何 |
任何 |
< = 0 |
任何 |
EINVAL |
任何 |
任何 |
< = 所需的結果字串的長度 |
任何 |
EINVAL |
任何 |
任何 |
任何 |
radix< 2 or radix > 36 |
EINVAL |
安全性問題
這些函式可以產生存取違規,如果buffer不是指向有效的記憶體,並不是NULL,或如果緩衝區的長度太短來保存結果字串。
備註
參數和傳回值, _itoa_s函式具有相同的行為相對應的較不安全版本。
在 C++ 中,使用這些函式已經過簡化的樣板的多載 ; 多載可以自動推斷緩衝區長度 (而不必指定 size 引數),它們可以自動取代較舊的、 不安全的函式與其較新的、 安全的對應項目。 如需詳細資訊,請參閱 安全範本多載。
這些函式的偵錯版本第一次填滿與 0xFD 的緩衝區。 若要停用這種情形,請使用_CrtSetDebugFillThreshold。
泛用文字常式對應
Tchar.h 常式 |
_Unicode 之後,未定義的 _MBCS |
定義的 _MBCS |
定義 _unicode 之後 |
---|---|---|---|
_itot_s |
_itoa_s |
_itoa_s |
_itow_s |
_i64tot_s |
_i64toa_s |
_i64toa_s |
_i64tow_s |
_ui64tot_s |
_ui64toa_s |
_ui64toa_s |
_ui64tow_s |
需求
常式 |
所需的標頭 |
---|---|
_itoa_s |
<stdlib.h> |
_i64toa_s |
<stdlib.h> |
_ui64toa_s |
<stdlib.h> |
_itow_s |
<stdlib.h> 或者 <wchar.h> |
_i64tow_s |
<stdlib.h> 或者 <wchar.h> |
_ui64tow_s |
<stdlib.h> 或者 <wchar.h> |
如需相容性資訊,請參閱相容性在簡介中。
範例
// 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)) );
}
}
Output
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)