time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
Cela renvoie: avertissement C4996: "heure locale": cette fonction ou variable peut être dangereuse. Envisagez plutôt d'utiliser localtime_s.
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime_s ( &rawtime );
Lorsque je modifie l'heure locale en heure locale, j'obtiens: erreur C2660: 'heure locale': la fonction ne prend pas 1 argument
Voici ce que je pense qui se passe dans le premier bloc de code:
convertir le temps brut en quelque chose de significatif pour les piétons
localtime
renvoie un pointeur sur un struct tm
alloué statiquement.
Avec localtime_s, vous passez un pointeur vers une structure tm, et localtime_s
Écrit ses données de résultat dans cela, donc votre code changerait de:
struct tm *timeinfo;
timeinfo = localtime(&rawtime);
à quelque chose comme:
struct tm timeinfo;
localtime_s(&timeinfo, &rawtime);
De cette façon, il écrit dans votre tampon au lieu d'avoir son propre tampon.
localtime_s est juste une implémentation Microsoft du functon localtime, vous pouvez continuer à utiliser locatime
en toute sécurité car il est conforme à C++ ISO et uniquement Microsoft l'a marqué comme "obsolète". La fonction localtime elle-même n'est pas du tout obsolète dans le monde C++.
Le localtime_s
référence indique que ces paramètres doivent lui être transmis:
_tm
Pointer to the time structure to be filled in.
time
Pointer to the stored time.
Comme Lightness Races in Orbit l'a souligné, localtime
n'est pas thread-safe ainsi que plusieurs autres fonctions temporelles. Je voulais en savoir plus sur le sujet et j'ai trouvé n article de blog pertinent avec une explication détaillée à ce sujet.
La citation ci-dessous explique pourquoi localtime
n'est pas thread-safe:
[...] localtime renvoie un pointeur vers un tampon statique (std :: tm *). Un autre thread peut appeler la fonction et le tampon statique peut être écrasé avant que le premier thread ait fini de lire le contenu de la structure std :: tm *.