_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
value基;哪些必须在范围 2-36。
返回值
零,如果成功;在失败的错误代码。 如果满足以下任何一个应用,该函数调用无效参数处理程序,如 参数验证所述。
错误状态
value |
缓冲区 |
sizeInCharacters |
基数 |
Return |
---|---|---|---|---|
任何 |
NULL |
任何 |
任何 |
EINVAL |
任何 |
任何 |
AMP_LT=0 |
任何 |
EINVAL |
任何 |
任何 |
需要的结果字符串的长度 AMP_LT= |
任何 |
EINVAL |
任何 |
任何 |
任何 |
radix AMP_LT 2 或 radix AMP_GT 36 |
EINVAL |
安全问题
这些功能可能发生访问冲突,如果 buffer 不指向有效的内存而不是 NULL,或者,如果缓冲区的长度不足够长保存结果字符串。
备注
除参数和返回值, _itoa_s 函数的行为和对应的较不安全版本。
在 C++ 中,使用这些功能由模板重载简化;重载可推断缓冲区长度 (自动不再需要指定范围参数),并且还可以用以较新,安全重复自动替换旧,不安全的功能。 有关更多信息,请参见 安全模板重载。
这些函数的 " debug " 版本用 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)