Frage

Ich brauche die aktuelle Zeit in einem „HH: MM: SS“ zu bekommen -Format in ein Zeichenfeld (string), so kann ich das Ergebnis auszugeben später einfach mit einem printf("%s", timeString);

Ich bin ziemlich verwirrt auf den timeval und time_t Arten btw, so eine Erklärung wäre genial:)

EDIT: Also habe ich versucht, mit strftime etc, und es irgendwie funktioniert. Hier ist mein Code:

time_t current_time;
struct tm * time_info;
char timeString[8];

time(&current_time);
time_info = localtime(&current_time);

strftime(timeString, 8, "%H:%M:%S", time_info);
puts(timeString);

Aber der Ausgang ist dies: "13: 49: 53a ?? J`aS"

Was ist los mit dem " a ?? J`aS? " am Ende?

War es hilfreich?

Lösung

Sie bekommen Müll aus diesem Code:

time_t current_time;
struct tm * time_info;
char timeString[8];

time(&current_time);
time_info = localtime(&current_time);

strftime(timeString, 8, "%H:%M:%S", time_info);
puts(timeString);

Weil Sie nicht Platz für einen Nullabschluss erlaubt (\ 0) auf der Saite, so dass, wenn die Zeichenfolge es gedruckt, es weiß nicht, wo das Ende ist und inteprets zufälliger Müll in dem nächsten Bit von Speichern als Teil die Zeichenfolge.

Ändern es dazu:

time_t current_time;
struct tm * time_info;
char timeString[9];  // space for "HH:MM:SS\0"

time(&current_time);
time_info = localtime(&current_time);

strftime(timeString, sizeof(timeString), "%H:%M:%S", time_info);
puts(timeString);

Und es wird richtig funktionieren, weil strftime() genügend Platz haben, wird fügen Sie ein \ 0. Beachten Sie, dass ich mit sizeof (Array), um das Risiko zu vermeiden, zu vergessen, die Zahl an beiden Stellen zu ändern.

Andere Tipps

Werfen Sie einen Blick auf die Strftime -Funktion, die Sie schreiben können die Zeit, in einen char-Array mit einem Format Ihrer Wahl.

#include <stdio.h>
#include <time.h>

/* get seconds since the Epoch */
time_t secs = time(0);

/* convert to localtime */
struct tm *local = localtime(&secs);

/* and set the string */
sprintf(timeString, "%02d:%02d:%02d", local->tm_hour, local->tm_min, local->tm_sec);

Die wichtigsten Typen für den Umgang mit der Zeit (die Wand-Uhr Art der Zeit, nicht Prozess / Thread Zeit) sind time_t und struct tm.
Mit etwas Arbeit können Sie zwischen umwandeln und den anderen, aber man muss darauf achten, Ortszeit im Vergleich zu UTC-Zeit.

Peruse die Beschreibung von <time.h> , versuchen Sie die Funktionen dort, bis Sie grok Zeit in C.

Auch hier achten Sie auf die UTC-Zeit und lokaler Zeit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top