测试一段程序,里面有strcpy这个函数 但是在VS编译器中会报警告
error C4996: ‘strcpy’: This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>c:\program files (x86)\windows kits\10\include\10.0.17134.0\ucrt\string.h(133): note: 参见“strcpy”的声明
问题出在编译器身上 VS已经不支持strcpy函数 认为是不安全的 可能会产生诸如内存泄露、缓冲区溢出、非法访问等安全问题
所以要在老版本的函数后面加 _s 但是需要3个或多个参数 因为这个不是要测试的重点 ,所以并没有改函数 仍然用strcpy进行测试。
搜寻到了两种解决方案。
一、在程序的最前面加上 #pragma warning(disable:4996) 表示为忽略改警告 。
1. #pragma warning只对当前文件有效(对于.h,对包含它的cpp也是有效的),而不是对整个工程的所有文件有效。当该文件编译结束,设置也就失去作用。
2. #pragma warning(push) 存储当前报警设置。
#pragma warning(push, n) 存储当前报警设置,并设置报警级别为n。n为从1到4的自然数。
3. #pragma warning(pop) 恢复之前压入堆栈的报警设置。在一对push和pop之间作的任何报警相关设置都将失效。
4. #pragma warning(disable: n)将某个警报置为失效
5. #pragma warning(default: n)将报警置为默认
附上以上5条信息的原作者 https://blog.csdn.net/liangzhaoyang1/article/details/51969386
二、可以使用_CRT_SECURE_NO_DEPRECATE标记来忽略这些警告问题。办法是在编译选项 C/C++ | Preprocessor | Preprocessor Definitions中,增加_CRT_SECURE_NO_DEPRECATE标记即可