zoukankan      html  css  js  c++  java
  • 'localtime': This function or variable may be unsafe. Consider using localtime_s instead.

    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)中的方法,大家可以根据按需选择,不过随着安全性的重要程度在逐步提高,还是建议大家以后使用安全版本。  

  • 相关阅读:
    Elementary Methods in Number Theory Exercise 1.2.25
    Elementary Methods in Number Theory Exercise 1.2.14
    图解欧几里德算法
    图解欧几里德算法
    Elementary Methods in Number Theory Exercise 1.2.14
    Android中的长度单位详解(dp、sp、px、in、pt、mm)
    分享下多年积累的对JAVA程序员成长之路的总结
    android异常之都是deamon惹的祸The connection to adb is down, and a severe error has occured.
    TomatoCartv1.1.8.2部署时报错
    JavaScript浏览器对象之二Document对象
  • 原文地址:https://www.cnblogs.com/wwssgg/p/15706658.html
Copyright © 2011-2022 走看看