Namensräume
Varianten
Aktionen

ctime, ctime_s

Von cppreference.com
< c‎ | chrono
Definiert in Header <time.h>
(1)
char*                ctime( const time_t* timer );
(bis C23)
[[deprecated]] char* ctime( const time_t* timer );
(seit C23)
errno_t ctime_s( char *buf, rsize_t bufsz, const time_t* timer );
(2) (seit C11)
1) Konvertiert die gegebene Zeit seit der Epoche in eine lokale Kalenderzeit und dann in eine Textdarstellung, als ob asctime(localtime(timer)) oder asctime(localtime_r(timer, &(struct tm){0}))(seit C23) aufgerufen würde. Diese Funktion ist veraltet und sollte in neuem Code nicht verwendet werden.(seit C23)
2) Gleiche Funktionalität wie (1), außer dass die Funktion äquivalent zu asctime_s(buf, bufsz, localtime_s(timer, &(struct tm){0})) ist, und die folgenden Fehler werden zur Laufzeit erkannt und rufen die aktuell installierte Constraint-Handler-Funktion auf.
  • buf oder timer ist ein Nullzeiger
  • bufsz ist kleiner als 26 oder größer als RSIZE_MAX
Wie bei allen grenzgeprüften Funktionen ist ctime_s nur dann garantiert verfügbar, wenn __STDC_LIB_EXT1__ von der Implementierung definiert wird und wenn der Benutzer __STDC_WANT_LIB_EXT1__ vor dem Einbinden von <time.h> auf die ganzzahlige Konstante 1 setzt.

Die resultierende Zeichenkette hat folgendes Format:

Www Mmm dd hh:mm:ss yyyy\n
  • Www - der Wochentag (einer von Mo, Di, Mi, Do, Fr, Sa, So).
  • Mmm - der Monat (einer von Jan, Feb, Mrz, Apr, Mai, Jun, Jul, Aug, Sep, Okt, Nov, Dez).
  • dd - der Tag des Monats
  • hh - Stunden
  • mm - Minuten
  • ss - Sekunden
  • jjjj - Jahre

Die Funktion unterstützt keine Lokalisierung.

Inhalt

[bearbeiten] Parameter

timer - Zeiger auf ein time_t-Objekt, das die zu druckende Zeit angibt
buf - Zeiger auf das erste Element eines Zeichen-Arrays der Größe mindestens bufsz
bufsz - maximale Anzahl zu schreibender Bytes, typischerweise die Größe des von buf angezeigten Puffers

[bearbeiten] Rückgabewert

1) Zeiger auf eine statische, nullterminierte Zeichenkette, die die Textdarstellung von Datum und Uhrzeit 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 (in diesem Fall wurde die Zeichenkettendarstellung der Zeit in das von buf angezeigte Array geschrieben), oder ungleich Null bei Fehler (in diesem Fall wird das abschließende Nullzeichen immer nach buf[0] geschrieben, es sei denn, buf ist ein Nullzeiger oder bufsz ist Null oder größer als RSIZE_MAX).

[bearbeiten] Anmerkungen

ctime gibt einen Zeiger auf statische Daten zurück und ist nicht threadsicher. Darüber hinaus modifiziert es das statische tm-Objekt, das möglicherweise mit gmtime und localtime geteilt wird. POSIX kennzeichnet diese Funktion als veraltet und empfiehlt stattdessen strftime. Der C-Standard empfiehlt ebenfalls strftime anstelle von ctime und ctime_s, da strftime flexibler und lokalisierungsempfindlicher ist.

Das Verhalten von ctime ist undefiniert für time_t-Werte, die zu einer Zeichenkette länger als 25 Zeichen führen (z.B. das Jahr 10000).

[bearbeiten] Beispiel

#define __STDC_WANT_LIB_EXT1__ 1
#include <time.h>
#include <stdio.h>
 
int main(void)
{
    time_t result = time(NULL);
    printf("%s", ctime(&result));
 
#ifdef __STDC_LIB_EXT1__
    char str[26];
    ctime_s(str,sizeof str,&result);
    printf("%s", str);
#endif
}

Mögliche Ausgabe

Tue May 26 21:51:03 2015
Tue May 26 21:51:03 2015

[bearbeiten] Referenzen

  • C17-Standard (ISO/IEC 9899:2018)
  • 7.27.3.2 Die ctime-Funktion (S. 287-288)
  • K.3.8.2.2 Die ctime_s-Funktion (S. 454)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.27.3.2 Die ctime-Funktion (S. 393)
  • K.3.8.2.2 Die ctime_s-Funktion (S. 626)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.23.3.2 Die ctime-Funktion (S. 342)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.12.3.2 Die ctime-Funktion

[bearbeiten] Siehe auch

(in C23 veraltet)(C11)
konvertiert ein tm-Objekt in eine Textdarstellung
(Funktion) [bearbeiten]
konvertiert ein tm-Objekt in eine benutzerdefinierte Textdarstellung
(Funktion) [bearbeiten]