如何使用_CRT_SECURE_NO_WARNINGS

vic*_*ico 45 c++ warnings visual-c++ visual-studio-2012

我在我的简单MFC窗口应用程序中编译错误,该应用程序由向导生成,包含几行代码:

错误C4996:'strncpy':此函数或变量可能不安全.请考虑使用strncpy_s.要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS.详细信息请参见在线帮助.

我设置 Configuration Properties>>C/C++>>Preporocessor>>Preprocessor Definitions>> _CRT_NONSTDC_NO_WARNINGS

但这没有帮助.我有另一个非常接近的项目,在这个地方只生成警告,它没有_CRT_NONSTDC_NO_WARNINGS定义.

只有项目之间的差异是向导中的几个不同选项.

为什么_CRT_NONSTDC_NO_WARNINGS对第一个项目没有帮助,为什么第二个项目在没有这个定义的情况下编译没有问题?

小智 82

在"项目 - >属性 - > C/C++ - >预处理器 - >预处理器定义"下添加_CRT_SECURE_NO_WARNINGS

  • 这应该是正确的答案......为我工作. (4认同)

Bal*_*alu 56

加入

配置属性>> C/C++ >>预处理器>>预处理器定义>> _CRT_SECURE_NO_WARNINGS

相关配置界面的屏幕截图

  • 配置属性>> C/C++ >>常规>>处理警告当错误设置为否(/ WX-)时 (5认同)
  • 对于任何想知道的人,请附加`; _CRT_SECURE_NO_WARNINGS` (2认同)

kmc*_*mee 23

如果您在Visual Studio 2012或更高版本中,则在"属性页"下有一个"SDL检查" - >"C/C++" - >"常规"

其他安全开发生命周期(SDL)建议检查; 包括启用其他安全代码生成功能和额外的安全相关警告作为错误.

它默认为YES - 出于某种原因,IE应该使用strncpy的安全版本.如果将此更改为NO,则在使用不安全版本时不会出现错误.

SDL检查vs2012及更高版本

  • “IE 你应该使用安全版本的 strncpy。” 仅供参考,SDL 检查推荐的安全版本似乎 [不可移植到其他操作系统](/sf/ask/60077671/),这将使它们不适合跨平台开发。看起来您必须为目标不仅仅是 Windows 的程序禁用此检查。 (2认同)

小智 10

为了快速修复或测试,我发现#define _CRT_SECURE_NO_WARNINGS在所有 #include 之前添加到文件顶部很方便

#define _CRT_SECURE_NO_WARNINGS
#include ...
int main(){
    //...
}
Run Code Online (Sandbox Code Playgroud)


小智 8

添加_CRT_SECURE_NO_WARNINGS项目 -> 属性 -> C/C++ -> 预处理器 -> 预处理器定义对我不起作用,不知道为什么。

以下提示有效:在 stdafx.h 文件中,请添加

#define _CRT_SECURE_NO_DEPRECATE
Run Code Online (Sandbox Code Playgroud)

在包含其他头文件之前。


rbe*_*nto 6

Visual Studio 2019CMake

将以下内容添加到CMakeLists.txt

add_definitions(-D_CRT_SECURE_NO_WARNINGS)
Run Code Online (Sandbox Code Playgroud)