_itoa_s
, _ltoa_s
, _ultoa_s
_i64toa_s
_ui64toa_s
_itow_s
_ltow_s
_ultow_s
_i64tow_s
_ui64tow_s
Преобразует целое число в строку. Эти функции — это версии _itoa
_itow
функций с улучшениями безопасности, как описано в функциях безопасности в CRT.
Синтаксис
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.
Возвращаемое значение
Возвращает нуль в случае успеха или код ошибки в случае неудачи. Если применяются какие-либо из следующих условий, функция вызывает недопустимый обработчик параметров, как описано в разделе проверки параметров.
Условия ошибок
значение | 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> |
Эти функции относятся к корпорации Майкрософт. Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
В этом примере демонстрируется использование нескольких функций целочисленного преобразования. Макрос _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)