localtime vs localtime_s et appropriée des arguments en entrée
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
Ce retourne: avertissement C4996: 'localtime": Cette fonction ou une variable peut être dangereux. Pensez à utiliser localtime_s à la place.
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime_s ( &rawtime );
Quand je change de localtime à localtime_s j'obtiens: erreur C2660: "localtime_s' : la fonction ne prend pas 1 arguments
Voici ce que je pense qui se passe dans le premier bloc de code:
- créer un vide time_t variable.
- créer un pointeur vers timeinfo qui est défini dans ctime
- écrire le rawtime dans un rawtime référence
-
convertir le rawtime en quelque chose de concret pour les piétons
- Suis-je droit?
- Ce deuxième paramètre d'entrée n'localtime_s besoin?
- Quel est le pire qui pourrait arriver si je viens de passer sous silence toute la localtime question de sécurité.
What second input parameter does localtime_s need?
Google est en place et fonctionne aujourd'hui, tu sais- oui, j'ai trouvé cela tout de suite: msdn.microsoft.com/en-us/library/a442x3ye(v=vs. 80).aspx mais je n'ai pas encore de comprendre comment interpréter ces template/générique? la description des méthodes. Tout comme je ne comprends pas la syntaxe/symboles de forme générale wiki mathématiques articles. struct tm* _tm et const time_t *le temps ne signifie rien pour moi, aussi loin que ce que je suis vraiment dire la méthode... mais je voudrais qu'il a fait.
- Oui, j'ai un peu de ceux qui sont trop.
Vous devez vous connecter pour publier un commentaire.
localtime
renvoie un pointeur sur une allouée statiquementstruct tm
.Avec localtime_s, vous passez un pointeur vers une struct tm, et
localtime_s
écrit ses données de résultat dans le, de sorte que votre code allait changer à partir de:à quelque chose comme:
De cette façon, il est écrit à votre tampon au lieu d'avoir un tampon de son propre.
timeinfo
est maintenant unstruct tm
au lieu d'un pointeur, donc là où les autres fonctions de l'utiliser, vous devez changer lestimeinfo
à&timeinfo
.localtime
renvoie un pointeur sur unestruct tm
--localtime_s
n' pas (elle renvoie un numéro d'erreur pour vous indiquer si la conversion que vous avez demandé a réussi ou non).localtime_s est juste un microsoft de la mise en œuvre de la localtime due, vous pouvez continuer à utiliser
locatime
parce que c'est du C++ conforme aux normes ISO et ony microsoft marqué comme "obsolète". La fonction localtime lui-même n'est pas obsolète du tout dans le C++ monde.La
localtime_s
référence dit que ces paramètres doivent être transmises à:localtime_r
. Fonctionne exactement de la même chose, sauf que l'un des deux arguments est inversé.localtime_s
fait partie de la standard depuis le C11.Comme La légèreté des Courses en Orbite souligné,
localtime
n'est pas thread-safe, ainsi que plusieurs autres temps de la fonction. Je voulais en savoir plus sur le sujet et j'ai trouvé un blog post avec un thoughrough explication à ce sujet.La citation ci-dessous explique pourquoi
localtime
n'est pas thread-safe: