得到错误"fopen":此函数或变量可能不安全.在比赛时

Sev*_*wan 22 c++ fopen opencv

编译时我收到此错误:

'fopen': This function or variable may be unsafe. 
Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
Run Code Online (Sandbox Code Playgroud)

我是C++的新手并且打开CV,因此请帮我摆脱这个错误.

谢谢

void _setDestination(const char* name)
{
    if (name==NULL) {
        stream = stdout;
    }
    else {
        stream = fopen(name,"w");
        if (stream == NULL) {
            stream = stdout;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

nvo*_*igt 71

这不是错误,它是来自Microsoft编译器的警告.

选择项目,然后单击上下文菜单中的"属性".

在对话框中,选择Configuration Properties- > C/C++- >Preprocessor

在PreprocessorDefinitions字段中添加;_CRT_SECURE_NO_WARNINGS以关闭这些警告.

  • @Bogdan是的,如果你只是微软,这很好,但这是一个MS扩展,而不是标准的C++.如果这是一个库或项目的一部分,而不仅仅是100%的Microsoft,则不应使用_s扩展,而应依赖于编写良好的标准符合代码. (8认同)
  • 我不明白为什么会写一个额外的条件块,以规避标准的符合行为.条件块适用于从平台变为平台且不在标准中的事物.这不是.这是标准的C和C++. (4认同)
  • @nvoigt使用Visual Studio 2013,它确实使用默认项目配置生成编译错误,而不是像Visual Studio 2012那样的警告. (3认同)
  • 我不会禁用此警告。取而代之的是,我将使用更安全的fopen版本,这意味着fopen_s。有关详细信息,请参见['CRT中的安全功能'](http://msdn.microsoft.com/zh-cn/library/8ef0s5kh.aspx)。 (2认同)
  • op没有将标准符合行为指定为要求.我只是提供了修复上述错误的选项. (2认同)

Bla*_*pel 9

这是常见的警告.你可以禁用它

#pragma warning(disable:4996)
Run Code Online (Sandbox Code Playgroud)

或者只是像微软一样使用fopen_s.

但一定要在其他标题之前使用pragma.

  • 该编译指示不适用于Visual Studio 2013. (3认同)
  • 不使用VS2017 (3认同)
  • 那是因为它是4996而不是4496 (2认同)