Namespaces
Variants

asctime, asctime_s

From cppreference.net
Definiert im Header <time.h>
(1)
char * asctime ( const struct tm * time_ptr ) ;
(bis C23)
[ [ deprecated ] ] char * asctime ( const struct tm * time_ptr ) ;
(seit C23)
errno_t asctime_s ( char * buf, rsize_t bufsz, const struct tm * time_ptr ) ;
(2) (seit C11)
1) Wandelt die gegebene Kalenderzeit tm in eine textuelle Darstellung der folgenden festen 25-Zeichen-Form um: Www Mmm dd hh : mm : ss yyyy\n
  • Www - dreistelliger englischer abgekürzter Wochentag aus time_ptr - > tm_wday , einer von Mon , Tue , Wed , Thu , Fri , Sat , Sun .
  • Mmm - dreistelliger englischer abgekürzter Monatsname aus time_ptr - > tm_mon , einer von Jan , Feb , Mar , Apr , May , Jun , Jul , Aug , Sep , Oct , Nov , Dec .
  • dd - 2-stelliger Tag des Monats aus timeptr - > tm_mday , wie ausgegeben von sprintf mit % 2d .
  • hh - 2-stellige Stunde aus timeptr - > tm_hour , wie ausgegeben von sprintf mit % .2d .
  • mm - 2-stellige Minute aus timeptr - > tm_min , wie ausgegeben von sprintf mit % .2d .
  • ss - 2-stellige Sekunde aus timeptr - > tm_sec , wie ausgegeben von sprintf mit % .2d .
  • yyyy - 4-stelliges Jahr aus timeptr - > tm_year + 1900 , wie ausgegeben von sprintf mit % 4d .
Das Verhalten ist undefiniert, falls ein Element von * time_ptr außerhalb seines normalen Bereichs liegt.
Das Verhalten ist undefiniert, wenn das durch time_ptr - > tm_year angegebene Kalenderjahr mehr als 4 Stellen hat oder kleiner als das Jahr 1000 ist.
Die Funktion unterstützt keine Lokalisierung, und das Zeilenumbruchzeichen kann nicht entfernt werden.
Die Funktion modifiziert statischen Speicher und ist nicht threadsicher.
Diese Funktion ist veraltet und sollte nicht in neuem Code verwendet werden.
(seit C23)
2) Gleich wie (1) , außer dass die Nachricht in den benutzerbereitgestellten Speicher buf geschrieben wird, der garantiert nullterminiert ist, und die folgenden Fehler zur Laufzeit erkannt werden und die aktuell installierte constraint handler -Funktion aufrufen:
  • buf oder time_ptr ist ein Nullzeiger
  • bufsz ist kleiner als 26 oder größer als RSIZE_MAX
  • nicht alle Mitglieder von * time_ptr liegen innerhalb ihrer normalen Bereiche
  • das durch time_ptr - > tm_year angegebene Jahr ist kleiner als 0 oder größer als 9999.
Wie bei allen bounds-checked-Funktionen ist asctime_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ durch die Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT1__ auf den Integer-Konstantenwert 1 setzt, bevor <time.h> eingebunden wird.

Inhaltsverzeichnis

Parameter

time_ptr - Zeiger auf ein tm -Objekt, das die auszugebende Zeit spezifiziert
buf - Zeiger auf einen vom Benutzer bereitgestellten Puffer mit mindestens 26 Bytes Länge
bufsz - Größe des vom Benutzer bereitgestellten Puffers

Rückgabewert

1) Zeiger auf eine statische nullterminierte Zeichenkette, die die textuelle Darstellung von Datum und Uhrzeit wie oben beschrieben enthält. Die Zeichenkette kann zwischen asctime und ctime geteilt werden und kann bei jedem Aufruf einer dieser Funktionen überschrieben werden.
2) Null bei Erfolg, ungleich Null bei Fehler, wobei in diesem Fall buf [ 0 ] auf Null gesetzt wird (sofern buf kein Nullzeiger ist oder bufsz nicht Null oder größer als RSIZE_MAX ist).

Hinweise

asctime gibt einen Zeiger auf statische Daten zurück und ist nicht threadsicher. POSIX kennzeichnet diese Funktion als veraltet und empfiehlt stattdessen strftime . Der C-Standard empfiehlt ebenfalls strftime anstelle von asctime und asctime_s , da strftime flexibler und lokalisierungssensitiv ist.

POSIX beschränkt undefiniertes Verhalten nur auf Fälle, in denen die Ausgabezeichenkette länger als 25 Zeichen wäre, wenn timeptr - > tm_wday oder timeptr - > tm_mon nicht innerhalb der erwarteten Bereiche liegen, oder wenn timeptr - > tm_year den Wert INT_MAX - 1990 überschreitet.

Einige Implementierungen behandeln timeptr - > tm_mday == 0 als Bedeutung für den letzten Tag des vorhergehenden Monats.

Beispiel

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#include <time.h>
int main(void)
{
    struct tm tm = *localtime(&(time_t){time(NULL)});
    printf("%s", asctime(&tm)); // note implicit trailing '\n'
#ifdef __STDC_LIB_EXT1__
    char str[26];
    asctime_s(str, sizeof str, &tm);
    printf("%s", str);
#endif
}

Mögliche Ausgabe:

Tue May 26 21:51:50 2015
Tue May 26 21:51:50 2015

Referenzen

  • C17-Standard (ISO/IEC 9899:2018):
  • 7.27.2.1 Die asctime-Funktion (S: 287)
  • K.3.8.2.1 Die asctime_s-Funktion (S: 453-454)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.27.2.1 Die asctime-Funktion (S: 392-393)
  • K.3.8.2.1 Die asctime_s-Funktion (S: 624-625)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.23.3.1 Die asctime-Funktion (S: 341-342)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 4.12.3.1 Die asctime-Funktion

Siehe auch

(in C23 veraltet) (C11)
konvertiert ein time_t -Objekt in eine textuelle Darstellung
(Funktion)
konvertiert ein tm -Objekt in eine benutzerdefinierte textuelle Darstellung
(Funktion)
C++-Dokumentation für asctime