关于VS2015中strncap和strcpy函数的问题及解决办法

来源:互联网 发布:路由器mac 编辑:程序博客网 时间:2024/06/05 09:29
         今天运行一个程序出现了报错,报错如下:.

'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

        大意即是这个函数使用不安全,应该用strcpy_s代替。然而我用strcpy_s代替后,又显示strcpy_s函数不能包含三个参数,这很是让人莫名奇妙。在网上多方搜索,固然有人说用strcpy_s代替云云,然而已经是不能解决的方法。后来看到有人提到报错里已经提供了解决办法了,即To disable deprecation, use _CRT_SECURE_NO_WARNINGS.

         尝试在报错的文件前面加上#define  _CRT_SECURE_NO_WARNINGS.但效果并不明显。在有些文件下面不在报错,但在其他文件中仍然报错。继续搜索,得到有效的解决方案如下:
1、打开“调试”,选择项目属性,在具体项目中,会显示为【文件名+属性】;

2、依次选择【C++】、【预处理器】;

3、在【预处理器定义】框中添加_CRT_SECURE_NO_WARNINGS。点击应用、确定即可。再次编译时就不再报错,正常运行。


最后,还要说一下strncpy_s函数,这是VS2015推荐的安全用法,它之所以安全,是因为它在接口中增加了一个参数numberOfElements来表明dest中的字节数,numberOfElements是目标字符串以字符为单位的大小。因此strncpy_s是四个参数的函数。下面是strncpy和strncpy_s的原型:
char * strncpy(char *dest, char *src, size_t n);
errno_t strncpy_s(     char *strDest,     size_t numberOfElements,     const char *strSource,     size_t count  ); 

但是strncpy_s并不是标准库的函数,因此不推荐使用。



阅读全文
0 0
原创粉丝点击