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
2-36 범위여야 하는 변환 value
에 사용할 기준입니다.
size
문자 형식 단위의 버퍼 길이입니다. 이 매개 변수는 C++의 buffer
인수에서 유추됩니다.
반환 값
이러한 각 함수는 buffer
에 대한 포인터를 반환합니다. 오류 반환이 없습니다.
설명
, _ltoa
, _ultoa
및 _ui64toa
_i64toa
함수는 _itoa
지정된 value
인수의 숫자를 null로 끝나는 문자열로 변환하고 결과를 저장합니다(최대 33자 _itoa
, _ltoa
및 _ultoa
65자 및 _i64toa
_ui64toa
)buffer
. 10과 같고 value
음수이면 radix
저장된 문자열의 첫 번째 문자는 빼기 기호(-)입니다. , _ltow
, _ultow
및 _i64tow
_ui64tow
함수는 _itow
각각 , _ltoa
_ultoa
, _i64toa
및 _ui64toa
의 _itoa
와이드 문자 버전입니다.
Important
이러한 함수는 너무 작은 버퍼의 끝을 지나서 작성할 수 있습니다. 버퍼 오버런을 방지하려면 변환된 숫자와 후행 null 문자 및 부호 문자를 저장할 수 있을 만큼 큰지 확인 buffer
합니다. 이러한 함수를 잘못 사용하면 코드에서 심각한 보안 문제가 발생할 수 있습니다.
보안 문제가 발생할 가능성이 있으므로 기본적으로 이러한 함수는 사용 중단 경고 C4996을 발생합니다. 이 함수 또는 변수는 안전하지 않을 수 있습니다. 대신 사용하는 safe_function
것이 좋습니다. 사용 중단을 사용하지 않으려면 .를 사용합니다 _CRT_SECURE_NO_WARNINGS
. 경고 메시지에서 제안된 내용을 사용하도록 safe_function
소스 코드를 변경하는 것이 좋습니다. 더 안전한 함수는 지정된 버퍼 크기보다 더 많은 문자를 쓰지 않습니다. 자세한 내용은 함수를 _itow_s
참조_itoa_s
하세요.
사용 중단 경고 없이 이러한 함수를 사용하려면 CRT 헤더를 포함하기 전에 전처리기 매크로를 정의 _CRT_SECURE_NO_WARNINGS
합니다. 명령에 컴파일러 옵션을 추가하여 /D_CRT_SECURE_NO_WARNINGS
정의할 cl
수 있습니다. 그렇지 않으면 소스 파일에서 매크로를 정의합니다. 미리 컴파일된 헤더를 사용하는 경우 미리 컴파일된 헤더 포함 파일 pch.h
의 맨 위에 있는 매크로를 정의합니다(stdafx.h
Visual Studio 2017 및 이전 버전). 소스 코드에서 매크로를 정의하려면 다음 예제와 같이 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
자세한 내용은 함수를 _itow_s
참조_itoa_s
하세요.
소스 코드 이식성을 위해 코드에 POSIX 이름을 유지하는 것이 좋습니다. 사용 중단 경고 없이 이러한 함수를 사용하려면 CRT 헤더를 포함하기 전에 전처리기 매크로와 _CRT_SECURE_NO_WARNINGS
전처리기 매크로를 모두 _CRT_NONSTDC_NO_WARNINGS
정의합니다. 명령에 컴파일러 옵션과 /D_CRT_NONSTDC_NO_WARNINGS
컴파일러 옵션을 추가하여 /D_CRT_SECURE_NO_WARNINGS
정의할 cl
수 있습니다. 그렇지 않으면 원본 파일에서 매크로를 정의합니다. 미리 컴파일된 헤더를 사용하는 경우 미리 컴파일된 헤더 포함 파일의 맨 위에 있는 매크로를 정의합니다. 소스 코드에서 매크로를 정의하려면 다음 예제와 같이 CRT 헤더를 포함하기 전에 지시문을 사용합니다 #define
.
#define _CRT_NONSTDC_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
최대 변환 수 매크로
변환을 위한 보안 버퍼를 만들 수 있도록 CRT에는 편리한 매크로가 포함되어 있습니다. 이러한 매크로는 여러 공통 베이스에 대해 null 종결자 및 부호 문자를 포함하여 각 정수 형식의 가능한 가장 긴 값을 변환하는 데 필요한 버퍼의 크기를 정의합니다. 변환 버퍼가 지정된 radix
베이스에서 변환을 받을 수 있을 만큼 충분히 큰지 확인하려면 버퍼를 할당할 때 이러한 정의된 매크로 중 하나를 사용합니다. 매크로를 사용하면 정수 형식을 문자열로 변환할 때 버퍼 오버런 오류를 방지할 수 있습니다. 이러한 매크로는 원본에 stdlib.h 또는 wchar.h를 포함할 때 정의됩니다.
문자열 변환 함수에서 이러한 매크로 중 하나를 사용하려면 적절한 문자 형식의 변환 버퍼를 선언하고 정수 형식 및 기본에 대한 매크로 값을 버퍼 차원으로 사용합니다. 다음 표에는 나열된 기본에 대한 각 함수에 적합한 매크로가 나열되어 있습니다.
함수 | 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 |
이 예제에서는 변환 수 매크로를 사용하여 base 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 전용입니다. 호환성에 대한 자세한 내용은 호환성을 참조하세요.
예시
이 샘플에서는 정수 변환 함수 중 일부를 사용하는 방법을 보여 줍니다. 매크로를 사용하여 _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)