J'ai besoin d'obtenir l'heure actuelle dans un "HH: MM: SS" -Format dans une matrice de caractères (chaîne) afin que je puisse émettre le résultat plus tard avec un Je suis assez confus sur le ÉDITER:
J'ai donc essayé avec la Strftime, etc. et ça a travaillé un peu. Voici mon code: p> mais la sortie est la suivante: "13: 49: 53A ?? J`as?" P> Que se passe-t-il avec le " printf ("% s", TIMESTRING) ; code> TIMEVAL code> et TIME_T CODE> Types BTW, de sorte que toute explication serait géniale :) p>
3 Réponses :
Jetez un coup d'œil au Fonction Strftime , ce qui vous permet d'écrire le temps dans un tableau de charret avec un format de votre choix. p>
#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); The important types for dealing with time (the wall-clock type of time, not process/thread time) are time_t and struct tm. With some work you can convert between one and the other, but you have to pay attention to local time versus UTC time.Peruse the description of <time.h>, try the functions there until you grok time in C.Again, pay attention to UTC time and local time.
Ne devons-nous pas faire ce que nous pouvons ne pas proliférer utiliser l'utilisation du sprintf sprintf () code>?
Je suis un peu d'accord ... mais ... pas dans l'extrait cippet ci-dessus ... Ne devrions-nous pas faire ce que nous pouvons faire pour ne pas proliférer l'utilisation de l'ajout entier intrinsèquement non sécurisé?
Vous obtenez des ordures à partir de ce code: car vous ne permettez pas de l'espace pour un terminateur null (\ 0) sur la chaîne, alors lorsque la chaîne qu'il imprimait, Ne sait pas où se trouve la fin et intepréte les ordures aléatoires dans le bit de la mémoire suivante dans le cadre de la chaîne. p> changez-le à ceci: p> Et cela fonctionnera correctement parce que Strftime () Code> a > aura assez d'espace pour ajouter un \ 0. Notez que j'utilise Taillef (tableau) pour éviter le risque d'oublier de changer le nombre dans les deux endroits. P> P>
Je prends habituellement l'approche pessimiste et la tailles tampons excessives. Par exemple, je déclare TIMESTRING [] CODE> avoir 20 caractères. La mémoire est bon marché et nous ne parlons que quelques octets supplémentaires ici. Et cela vous permet d'économiser lorsque vous décidez plus tard de changer la chaîne de format mais oubliez de mettre à jour la longueur de la mémoire tampon.
+1 pour l'utilisation de Tailleof () Code> Pour laisser le compilateur passe la taille de la matrice.