time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
Run Code Online (Sandbox Code Playgroud)
返回:警告C4996:'localtime':此函数或变量可能不安全.请考虑使用localtime_s.
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime_s ( &rawtime );
Run Code Online (Sandbox Code Playgroud)
当我将localtime更改为localtime_s时,我得到:错误C2660:'localtime_s':函数不带1个参数
以下是我认为在第一个代码块中正在进行的操作:
将原始时间转换为对行人有意义的事物
Jer*_*fin 59
localtime
返回指向静态分配的指针struct tm
.
使用localtime_s,您传入一个指向struct tm的指针,并将localtime_s
其结果数据写入其中,因此您的代码将从以下更改:
struct tm *timeinfo;
timeinfo = localtime(&rawtime);
Run Code Online (Sandbox Code Playgroud)
类似于:
struct tm timeinfo;
localtime_s(&timeinfo, &rawtime);
Run Code Online (Sandbox Code Playgroud)
通过这种方式,它是写你的缓冲区,而不是有它自己的缓冲区.
小智 7
localtime_s只是本地时间功能的微软实现,你可以放心使用,locatime
因为它符合C++ ISO标准并且ony microsoft将其标记为"已弃用".在C++世界中,本地时间函数本身并未被弃用.
该localtime_s
参考指出,应将这些参数传递给它:
_tm
Pointer to the time structure to be filled in.
time
Pointer to the stored time.
Run Code Online (Sandbox Code Playgroud)
正如Orbit中的Lightness Races指出的那样,localtime
不是线程安全以及其他几个时间功能.我想了解更多关于这个主题的内容,我找到了一篇相关的博文,其中有一个关于这个问题的解释.
下面的引用解释了为什么localtime
不是线程安全的:
[...] localtime返回指向静态缓冲区的指针(std :: tm*).另一个线程可以调用该函数,并且在第一个线程完成读取struct std :: tm*的内容之前,可以覆盖静态缓冲区.
归档时间: |
|
查看次数: |
64114 次 |
最近记录: |