ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

'localtime': This function or variable may be unsafe. Consider using localtime_s instead.

2021-12-19 08:31:06  阅读:215  来源: 互联网

标签:function Consider CRT WARNINGS NO warning SECURE localtime


Question:

大家好!
C++ 在程序中进行类型转换时,编译提示告警:DWORD 与 结构指针转换时 提示
警告8 warning C4312: “reinterpret_cast”: 从“DWORD”转换到更大的“HISDATAREC *”。 HISDATAREC是结构

使用localtime告警:
time_t ttNow;
ttNow = time(NULL);  tm *pTime = localtime(&ttNow);
提示:
警告 14 warning C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

请专家指教,怎样避免这种警告?

 

Answer:

1, 在项目设置的C/C++选项中,把检查64位移植性去掉。
2, 方案a:使用_localtime_s, _localtime32_s, _localtime64_s这3个函数代替localtime
     方案b:去掉C4996警告,比如按照提示所说 
#define _CRT_SECURE_NO_WARNINGS 1
或者直接#pragma warning( disable : 4996 )

 

如何在在项目设置的C/C++选项中,把检查64位移植性去掉?

(1)scanf等类似的函数已经不太安全,要想保证程序的安全性,建议以后采用_s结尾的安全版本,但是很多以前的程序可能还是使用不安全的版本,那么下面给出去掉这种错误提示的几种办法。

(2)在VS中新建项目的时候去掉“安全开发生命周期(SDL)检查”即可将错误转变成警告,使得使用不安全版本也不影响编译和运行,如下图所示。

 

(3)在头文件包含的最前面,记住是最前面(在include的前面)加上:#define _CRT_SECURE_NO_WARNINGS这个宏定义即可,如下图所示。

(4)在编译的头文件最前面加上:#pragma warning( disable : 4996)即可,类似于上图,此处不再附图。

(5)通过以下步骤Project properties->Configuration Properties->C/C++->Preprocessor->Preprocessor Definitions进入到预处理的定义中,点击按钮 (...),输入:_CRT_SECURE_NO_WARNINGS,使用 "\n" 相隔即可。

  总之,如果想完全不做安全检查,就使用(2)中的方法或者(5)中的方法,如果只是对某些文件不使用,可以使用(3)和(4)中的方法,个人喜欢使用(2)中的方法,大家可以根据按需选择,不过随着安全性的重要程度在逐步提高,还是建议大家以后使用安全版本。  

标签:function,Consider,CRT,WARNINGS,NO,warning,SECURE,localtime
来源: https://www.cnblogs.com/wwssgg/p/15706658.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有