Question

je dois obtenir l'heure actuelle dans un « HH: MM: SS » -format dans un tableau de caractères (string) afin que je puisse sortir le résultat plus tard simplement avec un printf("%s", timeString);

Je suis assez confus sur les types de timeval et time_t btw, de sorte que toute explication serait génial:)

EDIT: J'ai donc essayé avec strftime etc, et cela a fonctionné un peu. Voici mon 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);

Mais la sortie est la suivante: "13: 49: 53a ?? J`aS"

Qu'est-ce qui se passe avec la " J`aS ??? " à la fin?

Était-ce utile?

La solution

Vous obtenez des ordures de ce 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);

Parce que vous ne permettez pas d'espace pour une terminaison null (\ 0) sur la chaîne, alors quand la chaîne il imprimé, il ne sait pas où la fin est et inteprets au hasard dans les ordures le bit suivant de la mémoire dans le cadre de la chaîne.

Modifier à ceci:

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);

Et ça va fonctionner correctement parce que strftime() aura assez d'espace pour ajouter un \ 0. Notez que je suis en utilisant sizeof (tableau) pour éviter le risque d'oublier de modifier le nombre dans les deux endroits.

Autres conseils

Jetez un oeil à la fonction strftime , qui vous permet d'écrire le temps dans un tableau de caractères avec un format de votre choix.

#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);

Les types importants pour traiter avec le temps (le type de temps, pas de processus / temps de fil horloge murale) sont time_t et struct tm.
Avec un peu de travail que vous pouvez convertir entre un et l'autre, mais vous devez faire attention à l'heure locale par rapport à l'heure UTC.

de <time.h>, essayez les fonctions jusqu'à ce que vous grok temps en C.

Encore une fois, faites attention à l'heure UTC et l'heure locale.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top