localtime vs localtime_s and appropriate input arguments
localtime
returns a pointer to a statically allocated struct tm
.
With localtime_s, you pass in a pointer to a struct tm, and localtime_s
writes its result data into that, so your code would change from:
struct tm *timeinfo;
timeinfo = localtime(&rawtime);
to something like:
struct tm timeinfo;
localtime_s(&timeinfo, &rawtime);
This way, it's writing to your buffer instead of having a buffer of its own.
localtime_s is just a microsoft implementation of the localtime functon, you can safely keep using locatime
becaue it's C++ ISO compliant and ony microsoft marked it as "deprecated". The localtime function itself isn't deprecated at all in the C++ world.
The localtime_s
reference says that these parameters should be passed to it:
_tm
Pointer to the time structure to be filled in.
time
Pointer to the stored time.
As Lightness Races in Orbit pointed out, localtime
is not thread safe as well as several other time function. I wanted to know more about the subject and I found a relevant blog post with a thoughrough explanation about that.
The quote below explains why localtime
is not thread-safe:
[...] localtime returns a pointer to a static buffer (std::tm*). Another thread can call the function and the static buffer could be overwritten before the first thread has finished reading the content of the struct std::tm*.