vc2005 : declared deprecated warning

2024-01-23 17:08

本文主要是介绍vc2005 : declared deprecated warning,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载:http://spraut.spaces.live.com/

vc2005 : declared deprecated warning

    将以前的代码在vc2005下编译,经常会遇到类似如下的警告: warning C4996: 'strcat' was declared deprecated. 通常这类警告都是由于调用了字符串相关函数引起的。虽然这警告无伤大雅,仅仅只是说使用的函数已过时(deprecated)<需要用新的函数来替代>,但看着实在别扭,且看看ms为什么要设置成这样。

    搜索了一下ms的网站,找到了结果。ms认为以前的c/c++库中有一部分函数不够安全,希望程序员可以使用他们的替代安全库(Safe Library)来避免不必要的隐患。 整个原文请点击以下链接访问:Repel Attacks on Your Code with the Visual Studio 2005 Safe C and C++ Libraries

    在网上搜索到的最常用的解决方案,那就是定义 _CRT_SECURE_NO_DEPRECATE _SCL_SECURE_NO_DEPRECATE 来禁止vc2005对此产生警告(依然使用的是非安全库!0显然并不是一个好的解决方案)。而且如果使用了ATL,则还需要定义 _ATL_SECURE_NO_DEPRECATE 使用了MFC则需要定义 _AFX_SECURE_NO_DEPRECATE
   
然而尽管如此,更好的解决方案只需要定义一个宏 _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES, 那么vc将会自动替换使用他们的Safe Library来代替C/C++标准库(strcat将被strcat_f来取代)

    即使使用了_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下一个字符占2byte)作为单位,而不是bytes(字节).
    8.
记住所有的sizes(大小,非长度,缘由同上)包含了字符串结束符'/0'(即别忘了很多情况下size需要+1)
    9.
调试的时候监视数据0xfd (在调试版本下)0xfd将会被填充在数据(buffer,通常是字符串)的结尾处。如果运行非你所愿,可能会得到一个长度错误。
    10.
检查所有的错误。 许多新函数相比旧函数,能返回(表示)错误信息(的数值)

 

这篇关于vc2005 : declared deprecated warning的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/636938

相关文章

ITMS-90339: Deprecated Info.plist Key

The Info.plist contains a key 'UIApplicationExitsOnSuspend' in bundle 在info.plist中找到这个key——UIApplicationExitsOnSuspend,然后删掉就可以了。确保没问题的话也跑一下看是否可以能在后台运行。 需要先转换一下,才能找到对应的key

「Debug R」如何处理Error in readLines(f) :(converted from warning) incomplete final line found on xxx...

用devtools::install_github从GitHub上安装一个R包的时候出现了报错, 报错截图如下所示: 报错 从报错内容基本上可以确定是换行符惹的祸,我将该文件传送到Linux下,用cat -A检查,发现最后一行后面没有换行符。 ^M是Windows的换行符 解决方案: 手动增加最后一行。 手动加换行 到此当前的

【python】translate报错 MYMEMORY WARNING

使用python的translate包对文本进行翻译时,有时会报错:(MYMEMORY WARNING: YOU USED ALL AVAILABLE FREE TRANSLATIONS FOR TODAY. NEXT AVAILABLE IN  06 HOURS 45 MINUTES 18 SECONDSVISIT HTTPS://MYMEMORY.TRANSLATED.NET/DOC/USAG

Qt警告处理:libpng warning: iCCP: known incorrect sRGB profile

在 qt中加载某些 png图片会出现:libpng warning: iCCP: known incorrect sRGB profile 告警信息。这个警告主要跟png图片的格式有关,说明libpng库的支持还不是很好。 解决办法: (1)使用QImage对图片进行处理一下。 例子: QImage img;img.load("icon.png");img.save("icon.png

odoo17 小变更3 Warning、 “attrs “和 “states “不再用

odoo17 小变更 1、Warning  from odoo.exceptions import ValidationError,Warning ImportError: cannot import name 'Warning' from 'odoo.exceptions' (D:\od172406\odoo\exceptions.py) 2、自 17.0 版起,不再使用 "attrs "

makefile追加warning日志

在Makefile中,你不能直接“追加”warning日志到构建过程中,但你可以通过几种方式在构建时产生额外的警告或消息。以下是一些常用的方法: 使用echo或printf命令: 在Makefile的规则中,你可以使用echo或printf命令来输出警告信息。这些信息将被发送到标准输出(通常是终端或命令行界面)。 makefile复制代码 all: @echo "This is a warn

mysqli连接提示 Warning: mysqli::mysqli(): (HY000/2002): No such file or directory

今天在使用PHP的CLI方式访问mysql数据库时出现了一个 No such file or directory的错误,查找资料并在最终解决后记录一下。 这个问题应该也会存在于非CLI方式访问,简单的代码是这样的: <?php $mysqli = new mysqli('localhost', 'root', 'root', 'test'); 如果上面的连接地址是 localh

【Tools】git提示“warning: LF will be replaced by CRLF”的解决办法

原文链接:https://blog.csdn.net/u012757419/article/details/105614028 一、发现问题 windows平台下使用git add,git deploy 文件时经常出现“warning: LF will be replaced by CRLF” 的提示。 网上很多解决办法提到: 设置core.autocrlf=false,windows也用L

error MSB8031 Building an MFC project for a non-Unicode character set is deprecated

VS2013多字节工程问题     使用VS2013编译旧版VC++程序时,提示Building an MFC project for anon-Unicode character set is deprecated,微软提供了解决方案。   一、错误信息   1>C:\ProgramFiles (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microso

解决warning C4003: “min”宏的实参不足

错误信息如下: 1>f:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qdatetime.h(121): warning C4003: “min”宏的实参不足 1>f:\qt\qt5.1.1\5.1.1\msvc2010\include\qtcore\qdatetime.h(121): error C2589: “(”:“::”右边的非法标记 1>f:\qt