[VC] _CRT_SECURE_NO_WARNINGS

其實我不太用 VC 的所以沒注意到有這種問題,貌似在 VC2005 之後增加了 CRT 函數的安全性加強,也就是說修改了某些函數的安全性
More secure versions of run-time library routines are available.
詳細可以參考:CRT中的安全功能CRT函數的安全增強的版本

所以在使用一些標準函數時會出現錯誤...
error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
就是說 scanf 的聲明已經被認為是不安全的,讓你使用 scanf_S 來代替。

所以要解決這個錯誤很明顯地有兩個方法:
要不你就乖乖改用安全增強版的(_S)函數,不然根據 MSDN 的說法,你要忽略這個錯誤,必須定義 _CRT_SECURE_NO_WARNINGS,不過不知道為什麼我這樣寫不行...
The simplest is simply to define _CRT_SECURE_NO_WARNINGS or use the warning pragma.
#define _CRT_SECURE_NO_WARNINGS

所以其實還可以直接改專案屬性


對著右邊的方案總管點右鍵 > 屬性 > 組態屬性 > C/C++ > 前置處理器 > 前置處理器定義,然後在後面加上 _CRT_SECURE_NO_WARNINGS 就可以了...

還有一種做法是
#_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
直接透過編譯器在編譯時期用更安全的函式版本代換也就是你寫 scanf 在編譯時換成 scanf_s

本月最夯