asctime_s
, _wasctime_s
tm
시간 구조체를 문자열로 변환합니다. 이러한 함수는 asctime
버전, CRT 보안 기능에 설명된 것 처럼 보안 기능이 향상된 _wasctime
입니다.
구문
errno_t asctime_s(
char* buffer,
size_t numberOfElements,
const struct tm *tmSource
);
errno_t _wasctime_s(
wchar_t* buffer,
size_t numberOfElements
const struct tm *tmSource
);
template <size_t size>
errno_t asctime_s(
char (&buffer)[size],
const struct tm *tmSource
); // C++ only
template <size_t size>
errno_t _wasctime_s(
wchar_t (&buffer)[size],
const struct tm *tmSource
); // C++ only
매개 변수
buffer
문자열 결과를 저장할 버퍼에 대한 포인터입니다. 이 함수는 유효한 메모리 위치에 대한 포인터가 numberOfElements
에 의해 지정된 크기를 가지고 있다고 가정합니다.
numberOfElements
결과를 저장하는 데 사용되는 버퍼의 크기입니다.
tmSource
시간/날짜 구조체입니다. 이 함수는 유효한 struct tm
개체에 대한 포인터가 있다고 가정합니다.
반환 값
정상적으로 실행되는 경우 0입니다. 오류가 발생하면 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출됩니다. 계속해서 실행하도록 허용된 경우 반환 값은 오류 코드입니다. 오류 코드는 ERRNO.H에서 정의됩니다. 자세한 내용은 errno
상수입니다. 각 오류 조건에 대해 반환되는 실제 오류 코드가 다음 표에 나와 있습니다.
오류 조건
buffer |
numberOfElements |
tmSource |
반환 값 | buffer 의 값 |
---|---|---|---|---|
NULL |
모두 | 모두 | EINVAL |
Not modified |
NULL 아님(유효한 메모리를 가리킴) |
0 | 모두 | EINVAL |
Not modified |
NULL 아님 |
0<numberOfElements < 26 |
모두 | EINVAL |
빈 문자열 |
NULL 아님 |
>= 26 | NULL |
EINVAL |
빈 문자열 |
NULL 아님 |
>= 26 | 시간 구성 요소에 대한 잘못된 시간 구조체 또는 범위를 벗어난 값 | EINVAL |
빈 문자열 |
참고 항목
wasctime_s
에 대한 오류 조건은 크기 제한이 단어 단위로 측정된다는 점을 제외하면 asctime_s
와 비슷합니다.
설명
asctime
함수는 구조체로 저장된 시간을 문자열로 변환합니다. 값은 tmSource
일반적으로 호출 gmtime
에서 가져옵니다.localtime
TIME.H에 정의된 대로 tm
구조체를 작성하는 데 두 함수를 사용할 수 있습니다.
timeptr 멤버 | 값 |
---|---|
tm_hour |
자정 이후의 시간(0-23) |
tm_isdst |
일광 절약 시간이 적용되는 경우 양수입니다. 일광 절약 시간이 적용되지 않으면 0입니다. 일광 절약 시간 상태를 알 수 없는 경우 음수입니다. C 런타임 라이브러리에서는 DST(일광 절약 시간) 계산 구현을 위한 미국의 규칙이 사용된다고 가정합니다. |
tm_mday |
날짜(1-31) |
tm_min |
시간 후 분(0-59) |
tm_mon |
월(0-11; 1월 = 0) |
tm_sec |
분 후 초(0-59) |
tm_wday |
요일(0-6; 일요일 = 0) |
tm_yday |
연중 일(0-365; 1월 1일 = 0) |
tm_year |
연도(현재 연도 빼기 1900) |
또한 변환된 문자열은 현지 표준 시간대 설정에 따라 조정됩니다. 현지 시간을 구성하는 방법에 대한 자세한 내용은 , , _time64
_time32
, _ftime
, _ftime64
_ftime32
및localtime_s
, _localtime32_s
_localtime64_s
함수를 참조time
하세요. 표준 시간대 환경 및 전역 변수 정의에 대한 자세한 내용은 다음을 참조하세요 _tzset
.
asctime_s
에 의해 생성된 문자열 결과는 정확히 26자를 포함하며 Wed Jan 2 02:03:55 1980\n\0
형식을 갖습니다. 24시간제가 사용됩니다. 모든 필드에는 상수 너비가 있습니다. 줄 바꿈 문자 및 null 문자는 문자열의 마지막 두 자리를 차지합니다. 전달된 numberOfElements
값은 최소한 이 크기여야 합니다. 이보다 작으면 오류 코드가 EINVAL
반환됩니다.
_wasctime_s
은 asctime_s
의 와이드 문자 버전입니다. 그렇지 않으면_wasctime_s
과 asctime_s
이 동일하게 작동합니다.
이러한 함수의 디버그 라이브러리 버전은 먼저 버퍼를 0xFE 채웁니다. 이 동작을 사용하지 않도록 설정하려면 .를 사용합니다 _CrtSetDebugFillThreshold
.
기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.
일반 텍스트 루틴 매핑
TCHAR.H 루틴 | _UNICODE 및 _MBCS 정의되지 않음 |
정의된 _MBCS |
정의된 _UNICODE |
---|---|---|---|
_tasctime_s |
asctime_s |
asctime_s |
_wasctime_s |
C++에서는 템플릿 오버로드를 통해 이러한 함수를 사용하는 것이 더욱 간단해집니다. 오버로드는 버퍼 길이를 자동으로 유추할 수 있으므로 크기 인수를 지정할 필요가 없습니다. 자세한 내용은 안전한 템플릿 오버로드를 참조하세요.
요구 사항
루틴에서 반환된 값 | 필수 헤더 |
---|---|
asctime_s |
<time.h> |
_wasctime_s |
<time.h> 또는 <wchar.h> |
보안
버퍼 포인터가 아니 NULL
고 포인터가 유효한 버퍼를 가리키지 않는 경우 함수는 위치에 있는 모든 것을 덮어씁 수 있습니다. 이 오류로 인해 액세스 위반이 발생할 수도 있습니다.
전달된 크기 인수가 버퍼의 실제 크기보다 크면 버퍼 오버런이 발생할 수 있습니다.
예시
이 프로그램은 시스템 시간을 긴 정 aclock
수로 배치하고, 구조 newtime
체로 변환한 다음, 함수를 사용하여 asctime_s
출력을 위해 문자열 형식으로 변환합니다.
// crt_asctime_s.c
#include <time.h>
#include <stdio.h>
struct tm newtime;
__time32_t aclock;
int main( void )
{
char buffer[32];
errno_t errNum;
_time32( &aclock ); // Get time in seconds.
_localtime32_s( &newtime, &aclock ); // Convert time to struct tm form.
// Print local time as a string.
errNum = asctime_s(buffer, 32, &newtime);
if (errNum)
{
printf("Error code: %d", (int)errNum);
return 1;
}
printf( "Current date and time: %s", buffer );
return 0;
}
Current date and time: Wed May 14 15:30:17 2003
참고 항목
시간 관리
ctime_s
, _ctime32_s
, _ctime64_s
, _wctime_s
, _wctime32_s
_wctime64_s
_ftime
, , _ftime32
_ftime64
gmtime_s
, , _gmtime32_s
_gmtime64_s
localtime_s
, , _localtime32_s
_localtime64_s
time
, , _time32
_time64
_tzset