How to use _CRT_SECURE_NO_WARNINGS

361,929

Solution 1

Add by

Configuration Properties>>C/C++>>Preporocessor>>Preprocessor Definitions>> _CRT_SECURE_NO_WARNINGS

screenshot of the relevant config interface

Solution 2

Under "Project -> Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions" add _CRT_SECURE_NO_WARNINGS

Solution 3

If your are in Visual Studio 2012 or later this has an additional setting 'SDL checks' Under Property Pages -> C/C++ -> General

Additional Security Development Lifecycle (SDL) recommended checks; includes enabling additional secure code generation features and extra security-relevant warnings as errors.

It defaults to YES - For a reason, I.E you should use the secure version of the strncpy. If you change this to NO you will not get a error when using the insecure version.

SDL checks in vs2012 and later

Solution 4

For a quick fix or test, I find it handy just adding #define _CRT_SECURE_NO_WARNINGS to the top of the file before all #include

#define _CRT_SECURE_NO_WARNINGS
#include ...
int main(){
    //...
}

Solution 5

Adding _CRT_SECURE_NO_WARNINGS to Project -> Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions didn't work for me, don't know why.

The following hint works: In stdafx.h file, please add

#define _CRT_SECURE_NO_DEPRECATE

before include other header files.

Share:
361,929

Related videos on Youtube

vico
Author by

vico

Updated on July 08, 2022

Comments

  • vico
    vico almost 2 years

    I have compile error in my simple MFC window application generated from wizard with several lines of code:

    error C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

    I set Configuration Properties>>C/C++>>Preporocessor>>Preprocessor Definitions>> _CRT_NONSTDC_NO_WARNINGS

    But this does't helped. I have another very close project that generates only warning in this place and it has no _CRT_NONSTDC_NO_WARNINGS definition.

    Only difference between projects is several different options in wizard.

    Why _CRT_NONSTDC_NO_WARNINGS does not helps in first project and why second project compiles without problems without this definition?

    • Balu
      Balu about 10 years
      Did you try with _CRT_SECURE_NO_WARNINGS ?
    • Balu
      Balu about 10 years
      may be your project in Visual Studio has a "treat warnings as errors" option enabled.
    • user1703401
      user1703401 about 10 years
      Read the error message
    • vico
      vico about 10 years
      "treat warnings as errors" is set to No (/WX-)
    • vico
      vico about 10 years
      yes, I could use strncpy_s, but why another project has no problems wit that?
    • David C. Rankin
      David C. Rankin about 6 years
      These type problems are a classic example of why it is important to learn to build from the command line to familiarize yourself with what options your code need to compile before jumping to the IDE where a bulk of the time you spend troubleshooting problems is simply where is that option buried in VSCode?
  • omni
    omni over 9 years
    try using the /GS- flag
  • jrh
    jrh over 6 years
    "I.E you should use the secure version of the strncpy." just FYI, the secure versions that the SDL checks are recommending seem to be not portable to other OSes, which would make them not suitable for cross platform development. It looks like you would have to disable this check for programs that target more than just windows.
  • cal17_hogo
    cal17_hogo over 3 years
    why does #define _CRT_SECURE_NO_WARNINGS need to go above #include?
  • E-rich
    E-rich about 3 years
    Or per target: target_compile_definitions(myTarget PRIVATE _CRT_SECURE_NO_WARNINGS)
  • Keith Thompson
    Keith Thompson about 3 years
    @cal17_hogo It depends on what's in the headers that are #included. If the headers don't depend on anything that requires _CRT_SECURE_NO_WARNINGS, then the #define can go after the #includes.
  • Peter - Reinstate Monica
    Peter - Reinstate Monica about 2 years
    @Keith The headers are what causes the compiler to emit the warnings. If you declare the function manually, there s no warning/error. So if you get the warning the define must go before the header. Here, it's _Check_return_ _CRT_INSECURE_DEPRECATE(ctime_s) in time.h, together with #ifdef _CRT_SECURE_NO_WARNINGS... earlier
  • Mawg says reinstate Monica
    Mawg says reinstate Monica almost 2 years
    I don't see this dialog in Visual Studio 2019 :-(