VS2005中(_CRT_SECURE_NO_DEPRECATE)警告

来源:互联网 发布:高邮淘宝美工培训机构 编辑:程序博客网 时间:2024/05/16 12:47

转自:http://blog.163.com/zhaojun_xf/blog/static/3005058020113214131634/

在VS2005中调用strcpy、strcat等函数时会提示_CRT_SECURE_NO_DEPRECATE警告,原因是这些函数不安全,可能会造成内存泄露等。所以建议采用带_s的函数,如strcpy_s,calloc_s。

       当然,如果执意使用老版本、非安全版本函数,可以使用_CRT_SECURE_NO_DEPRECATE标记来忽略这些警告问题。办法是在编译选项 C/C++ | Preprocessor | Preprocessor Definitions中,增加_CRT_SECURE_NO_DEPRECATE标记即可。方式是点击工程右键选择“Properties->C/C++ | Preprocessor | Preprocessor Definitions”在后面添加“_CRT_SECURE_NO_DEPRECATE”标记即可。

      虽然我在采用高级版本中没有提示警告,但是在调试时会提示如下错误:

VS2005中(_CRT_SECURE_NO_DEPRECATE)警告 - 我心永恒 - ARM-实践者

 所以最终还是选择使用低版本函数。

    即使使用了_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES,代码将依旧不够安全:(, 对此,ms提出了如下10点建议:
    1. 不要认为 strcpy_s 和 strncpy_s( 以及其他的字符串函数)(在空间不够的时候)会自动终止拷贝(truncate截断,不截断则意味着溢出).如果需要自动截断,请使用strncpy_s (同时使用_TRUNCATE作为长度参数)。
    2. 记住fopen_s缺省是独占模式。如需共享使用文件,应该使用_sopen。
    3. 别忘了_dupenv_s, 它将比_getenv_s更容易使用,因为它能自动分配一个正确长度的内存(buffer)。
    4. 在scanf_s中小心参数顺序。
    5. 确定printf_s中格式字符串的正确。
    6. 使用_countof(x)来取代sizeof(x)/sizeof(element). _countof将会正确的计算元素个数,而且如果x是一个指针,编译器将会发出一个警告(来提醒程序员,仅针对C++编译)
    7. 记住所有的sizes(大小,非长度)都是使用characters(字符,unicode下一个字符占2个byte)作为单位,而不是bytes(字节).
    8. 记住所有的sizes(大小,非长度,缘由同上)包含了字符串结束符’\0′(即别忘了很多情况下size需要+1)。
    9. 调试的时候监视数据0xfd。 (在调试版本下)0xfd将会被填充在数据(buffer,通常是字符串)的结尾处。如果运行非你所愿,可能会得到一个长度错误。
    10. 检查所有的错误。 许多新函数相比旧函数,能返回(表示)错误信息(的数值)。

原创粉丝点击