asctime_s
, _wasctime_s
Konwertowanie tm
struktury czasu na ciąg znaków. Te funkcje to wersje programu asctime
_wasctime
z ulepszeniami zabezpieczeń zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.
Składnia
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
Parametry
buffer
Wskaźnik do buforu do przechowywania wyniku ciągu znaków. Ta funkcja zakłada, że wskaźnik do prawidłowej lokalizacji pamięci o rozmiarze określonym przez numberOfElements
.
numberOfElements
Rozmiar buforu używanego do przechowywania wyniku.
tmSource
Struktura godziny/daty. Ta funkcja zakłada, że wskaźnik jest prawidłowym struct tm
obiektem.
Wartość zwracana
Zero, jeśli się powiedzie. Jeśli wystąpi błąd, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonanie jest dozwolone do kontynuowania, zwracana wartość jest kodem błędu. Kody błędów są zdefiniowane w pliku ERRNO.H. Aby uzyskać więcej informacji, zobacz errno
stałe. W poniższej tabeli przedstawiono rzeczywiste kody błędów zwracane dla każdego warunku błędu.
Warunki błędu
buffer |
numberOfElements |
tmSource |
Powrót | Wartość w buffer |
---|---|---|---|---|
NULL |
Dowolne | Dowolne | EINVAL |
Nie zmodyfikowano |
Nie NULL (wskazuje prawidłową pamięć) |
0 | Dowolne | EINVAL |
Nie zmodyfikowano |
Nie NULL |
0<numberOfElements < 26 |
Dowolne | EINVAL |
Pusty ciąg |
Nie NULL |
>= 26 | NULL |
EINVAL |
Pusty ciąg |
Nie NULL |
>= 26 | Nieprawidłowa struktura czasu lub wartości poza zakresem dla składników czasu | EINVAL |
Pusty ciąg |
Uwaga
Warunki wasctime_s
błędu są podobne do asctime_s
z wyjątkiem, że limit rozmiaru jest mierzony w słowach.
Uwagi
Funkcja asctime
konwertuje czas przechowywany jako strukturę na ciąg znaków. Wartość tmSource
jest zwykle uzyskiwana z wywołania metody lub gmtime
localtime
. Obie funkcje mogą służyć do wypełniania struktury zgodnie z definicją tm
w funkcji TIME.H.
element członkowski czasomierza | Wartość |
---|---|
tm_hour |
Godziny od północy (0-23) |
tm_isdst |
Dodatnie, jeśli czas letni jest w mocy; 0, jeśli czas letni nie jest w mocy; ujemny, jeśli stan czasu letniego jest nieznany. Biblioteka języka C w czasie wykonywania zakłada reguły Stany Zjednoczone dotyczące implementowania obliczeń czasu letniego (DST). |
tm_mday |
Dzień miesiąca (1–31) |
tm_min |
Minuty po godzinie (0–59) |
tm_mon |
Miesiąc (0–11; Styczeń = 0) |
tm_sec |
Sekundy po minucie (0–59) |
tm_wday |
Dzień tygodnia (0–6; Niedziela = 0) |
tm_yday |
Dzień roku (0–365; 1 stycznia = 0) |
tm_year |
Rok (bieżący rok minus 1900) |
Przekonwertowany ciąg znaków jest również dostosowywany zgodnie z ustawieniami lokalnej strefy czasowej. Aby uzyskać informacje na temat konfigurowania czasu lokalnego, zobacz funkcje , , _time32
, _ftime64
_ftime32
_time64
_ftime
i . _localtime64_s
_localtime32_s
localtime_s
time
Aby uzyskać informacje na temat definiowania środowiska strefy czasowej i zmiennych globalnych, zobacz _tzset
.
Wynik ciągu wygenerowany przez asctime_s
program zawiera dokładnie 26 znaków i ma postać Wed Jan 2 02:03:55 1980\n\0
. Jest używany zegar 24-godzinny. Wszystkie pola mają stałą szerokość. Nowy znak wiersza i znak null zajmują dwa ostatnie pozycje ciągu. Wartość przekazana jako numberOfElements
powinna mieć co najmniej ten rozmiar. Jeśli jest mniej, zostanie zwrócony kod błędu , EINVAL
.
_wasctime_s
jest wersją o szerokim znaku .asctime_s
_wasctime_s
i asctime_s
zachowywać się identycznie inaczej.
Wersje biblioteki debugowania tych funkcji najpierw wypełniają bufor 0xFE. Aby wyłączyć to zachowanie, użyj polecenia _CrtSetDebugFillThreshold
.
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Mapowanie rutynowego tekstu ogólnego
Procedura TCHAR.H | _UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_tasctime_s |
asctime_s |
asctime_s |
_wasctime_s |
W języku C++używanie tych funkcji jest uproszczone przez przeciążenia szablonu; przeciążenia mogą automatycznie wnioskować długość buforu, eliminując konieczność określenia argumentu rozmiaru. Aby uzyskać więcej informacji, zobacz Bezpieczne przeciążenia szablonów.
Wymagania
Procedura | Wymagany nagłówek |
---|---|
asctime_s |
<time.h> |
_wasctime_s |
<time.h> lub <wchar.h> |
Zabezpieczenia
Jeśli wskaźnik buforu nie NULL
jest i wskaźnik nie wskazuje prawidłowego buforu, funkcja zastąpi dowolne elementy w lokalizacji. Ten błąd może również spowodować naruszenie dostępu.
Przekroczenie buforu może wystąpić, jeśli argument rozmiaru przekazany w pliku jest większy niż rzeczywisty rozmiar buforu.
Przykład
Ten program umieszcza czas systemowy w długiej liczbą całkowitą aclock
, tłumaczy ją na strukturę newtime
, a następnie konwertuje go na formularz ciągu dla danych wyjściowych przy użyciu asctime_s
funkcji .
// 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
Zobacz też
Zarządzanie czasem
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