vs2010下警告老说fopen、sprintf不安全是什么意思??要用fopen_s,sprintf
这是为什么,是编译器的问题,还是C++标准就这样要求。
f:\vs2010\新c++\从文件中读数据\从文件中读数据\从文件中读数据.cpp(9): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\软件工具\vs2010\vc\include\stdio.h(234) : see declaration of 'fopen'
1>f:\vs2010\新c++\从文件中读数据\从文件中读数据\从文件中读数据.cpp(31): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\软件工具\vs2010\vc\include\stdio.h(371) : see declaration of 'sprintf'
[解决办法]
C++ 为了提高安全性,又增加了几个版本,你用的是标准C中的旧时写法,其实无所谓。
[解决办法]
标准无此规定,是编译器自己的偏好,说完……
[解决办法]
标准里面根本就没有 _s 系列的函数,都是微软自己弄出来的……
[解决办法]
的确有不安全的因素,但绝大部分情况下,基本上可以忽略。
所以,对于那样的warning,你可以选择不care。
[解决办法]
_CRT_SECURE_NO_DEPRECATE
[解决办法]
标准不会对warning产生规定,但是scanf的确有安全问题。
如果你能说出是什么安全问题,那么你就不必在意了,
如果你不知道会引起什么安全问题,那么你应该用scanf_s
[解决办法]
你可以在代码中加入_CRT_SECURE_NO_DEPRECATE宏来避免此类提示。
微软之所以认为这个不安全是因为直接使用buffer的函数容易崩溃,因此他们弄了个新函数,但是这个函数不可移植。
[解决办法]
当然不是崩溃那么简单,崩溃倒是安全了,微软就不必费心弄新函数了~
[解决办法]
所以说windows程序员写的程序漏洞百出,到处成为被攻击的对象。微软都已经给你解决方案了,你们还要忽略~
[解决办法]
如果你的程序对安全性要求很高,并且只是在windows下运行,那么你可以选择使用windows提供的安全函数,如果有其他情况建议你再考虑一下是否使用。