'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)中的方法,大家可以根據按需選擇,不過隨着安全性的重要程度在逐步提高,還是建議大家以后使用安全版本。  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM