time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
This returns: warning C4996: \'localtime\': Thi
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.
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.
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*.