Udostępnij za pośrednictwem


asctime_s, _wasctime_s

Konwertowanie tm struktury czasu na ciąg znaków. Te funkcje to wersje programu asctime _wasctimez 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_ftimei . _localtime64_s_localtime32_s localtime_stime 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_sjest 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