Localtime vs localtime_s和适当的输入参数
localtime vs localtime_s and appropriate input arguments
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
返回:警告C4996: 'localtime':这个函数或变量可能不安全。考虑使用localtime_s。
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime_s ( &rawtime );
当我将本地时间更改为localtime_s时,我得到:错误C2660: 'localtime_s':函数不接受1个参数
下面是我认为的第一块代码:
- 创建一个空time_t变量 在ctime中定义一个指向timeinfo的指针
- 将原始时间写入原始时间引用
将原始时间转换为对行人有意义的东西
- 我说的对吗?
- localtime_s需要什么第二个输入参数?
- 如果我忽略整个本地时间安全问题,最坏的情况会是什么?
localtime
返回一个指向静态分配的struct tm
的指针。
使用localtime_s,您传入一个指向结构体tm的指针,并且localtime_s
将其结果数据写入其中,因此您的代码将更改为:
struct tm *timeinfo;
timeinfo = localtime(&rawtime);
转换成:
struct tm timeinfo;
localtime_s(&timeinfo, &rawtime);
这样,它会写入你的缓冲区,而不是有自己的缓冲区。
localtime_s只是localtime函数的微软实现,您可以安全地继续使用locatime
,因为它是c++ ISO兼容的,只有微软将其标记为"已弃用"。在c++世界中,localtime函数本身并没有被弃用。
localtime_s
引用说这些参数应该传递给它:
_tm
Pointer to the time structure to be filled in.
time
Pointer to the stored time.
正如Lightness Races in Orbit所指出的那样,localtime
和其他几个时间函数一样不是线程安全的。我想更多地了解这个主题,我找到了一篇相关的博客文章,上面有详细的解释。
下面的引号解释了为什么localtime
不是线程安全的:
[…localtime返回一个指向静态缓冲区(std::tm*)的指针。另一个线程可以调用该函数,并且静态缓冲区可以在第一个线程完成读取struct std::tm*的内容之前被覆盖。
相关文章:
- 将输入参数作为右值引用传递?
- 是否可以在命令行中将输入参数传递给可执行文件
- C++基于输入参数的动态代码生成
- 我想知道为什么"std::unique_ptr<int> foo(新 int)"是合法的,因为"std::<int>unique_ptr"要求输入参数类型应该是"int"?
- 如何使用输入参数作为文件的传递?
- 在函数中使用运算符重载,在 c++ 中使用 const 类型输入参数
- 提供变量作为 MATLAB 系统命令的输入参数,以便C++可执行文件
- 函数的函数无法识别输入参数
- 当迭代器(输入参数)通常不是constexpr时,constexpr算法真的有用吗
- 如何将一个使用参数包和typename的类作为函数(c++)的输入参数
- CvMat:输入参数的大小不匹配
- 在什么情况下,使用'const T*'输入参数比'const T&'更可取?
- std::具有两个输入参数的矢量构造函数
- GoogleMock:如何根据另一个输入参数设置ArgReferee?
- 模板化函数以从输入参数推断返回类型 stl-container
- GoogleMock:如何验证输入参数的调用次数?
- 当我将 char 数组发送到输入参数为字符串的函数时会发生什么?
- 应该接受不同输入参数的纯虚函数 - 应该如何实现
- C++主函数的输入参数
- STD :: Atomic_fetch为什么将指针作为其输入参数