Visualstudio新版本不允许使用strcat,strcpy的解决方案之一_拔剑-浆糊的传说_新浪博客...

本文介绍在Windows平台上,使用Visual Studio编译器时,如何替换不安全的字符串操作函数strcpy和strcat,以避免缓冲区溢出等安全问题。通过定义宏的方式,将这两个函数替换为更安全的strcpy_s和strcat_s版本。
把下面代码加到某个头文件中,放在最后include, 或者直接放在cpp文件上面
#if defined(WIN32) || defined(WIN64)   // windows platform
    # ifdef _MSC_VER
        # if (_MSC_VER >= 1800)
            #define  strcpy(dest,src)  strcpy_s(dest,strlen(src)+1,src)
            #define  strcat(dest,src)  strcat_s(dest,strlen(dest)+strlen(src)+1,src)
        # endif
    # endif
# endif

在Visual Studio 2019中使用strcpy_s和strcat_s这两个安全函数时,经常会出现安全警告和编译错误C4996。错误C4996通常是由于旧的、安全的函数如strcpystrcat在项目中被使用,而这些函数在最新的编译器设置中已经被标记为过时。为了避免这些问题,你需要做以下几步操作: 参考资源链接:[VS2019中strcpy_s与strcat_s的使用详解](https://wenku.csdn.net/doc/6412b669be7fbd1778d46a1c?spm=1055.2569.3001.10343) 首先,确保你的项目设置中启用了SDL(安全开发生命周期)检查。在VS2019中,你可以通过项目属性来启用这些检查。具体操作如下:在解决方案资源管理器中右击项目,选择属性,然后依次点击‘C/C++’、‘常规’,在‘SDL检查’选项中选择‘是 (/sdl)’。启用SDL检查后,编译器将帮助你发现和防止潜在的安全问题。 其次,由于strcpy_s和strcat_s要求明确地指定目标缓冲区的大小,你需要确保在调用这些函数时正确地传递缓冲区大小参数。例如,如果你的目标缓冲区是一个字符数组,你应该使用sizeof运算符来获取其大小。如果目标是一个指针,你需要确保你有一个额外的变量来存储剩余的空间大小。 最后,如果你在代码中使用了旧的、安全的函数,并且它们是安全的,你可以在函数名前添加一个下划线(_)来告诉编译器这是一个有意为之的选择,这样可以避免SDL检查产生的警告。例如: ```cpp char* my_strcpy(char *dest, const char *src) { return strcpy(dest, src); // 使用老的strcpy函数,但是为了避开警告加上下划线 } ``` 通过上述步骤,你应该能够在VS2019中安全地使用strcpy_s和strcat_s函数,同时避免编译错误C4996和相关的安全警告。为了进一步提高你的安全编程水平,建议深入阅读《VS2019中strcpy_s与strcat_s的使用详解》,该文档仅涵盖了这两个函数的使用细节,还详细解释了它们如何提高代码安全性,以及如何处理常见的缓冲区溢出问题。 参考资源链接:[VS2019中strcpy_s与strcat_s的使用详解](https://wenku.csdn.net/doc/6412b669be7fbd1778d46a1c?spm=1055.2569.3001.10343)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值