VS2005编译之declared deprecated警告

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

在VS2005下编译代码,有时会遇到类似如下的警告: 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对此产生警告(依然使用的是非安全库!显然并不是一个好的解决方案)。而且如果使用了ATL,则还需要定义 _ATL_SECURE_NO_DEPRECATE, 使用了MFC则需要定义 _AFX_SECURE_NO_DEPRECATE。

    然而尽管如此,更好的解决方案只需要定义一个宏CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES, 那么VS将会自动替换使用他们的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下一个字符占2个byte)作为单位,而不是bytes(字节).

      8. 记住所有的sizes(大小,非长度,缘由同上)包含了字符串结束符'/0'(即别忘了很多情况下size需要+1)。

      9. 调试的时候监视数据0xfd。 (在调试版本下)0xfd将会被填充在数据(buffer,通常是字符串)的结尾处。如果运行非你所愿,可能会得到一个长度错误。

      10. 检查所有的错误。 许多新函数相比旧函数,能返回(表示)错误信息(的数值)。

 

 

 

————————————————————————————————————————————————

 

     PS:定义宏_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES好像不能消除警告

 

1. gets_s()代替gets()

2.strcpy_s()来代替strcpy()

3.strncpy_s()代替strncpy()

4.sprintf_s()代替sprintf()

5.CString::Format(_T("字符转"))代替CString::Format("字符转")

6.strcat_s()代替strcat()

7.fopen_s()代替fopen()

8._vsnprintf_s()代替_vsnprintf()

9._ftime64_s()代替_ftime64()

10._get_tzname ()代替_tzname()

11._snwprintf_s()代替_snwprintf()

12.mbstowcs_s()代替mbstowcs()

13.wcstombs_s()代替wcstombs()

14.wcscat_s()代替wcscat()

15._wcsupr_s()代替_wcsupr()

16._wcslwr_s()代替_wcslwr() 

 

17._wtoi()代替atoi()

【FFmpeg】解决警告warning: xxx is deprecated [-Wdeprecated-declarations]的方法 1、问题描述 编译FFmpeg程序时,经常报一些关于“deprecated”的警告信息,具体内容如下: decode.cpp:28:2: warning: ‘void av_register_all()’ is deprecated [-Wdeprecated-declarations] av_register_all(); decode.cpp:34:2: warning: ‘void av... 阅读详情

相关推荐

在C++遇到有些关键字或者函数被弃用的情况,比如xxx was declared deprecated

在C++遇到有些关键字或者函数被弃用的情况 随着每一次C++的不断更新,可能都会有些函数或者关键字会被弃用,或者换成了其他的名字,这在编写代码的时候经常会碰到,碰到这种情况,可以在代码的第一行写上忽略此错误的句子,一般为: #pragma  warning(disable:错误编号) 如:下面这段代码中使用了strdup(),此函数的功能是讲函数中的数据拷贝到另一个变量中,这是调试程序会

lsh894609937的专栏 2869

Cmake工程报warning: XXX is deprecated [-Wdeprecated-declarations]

描述 Cmake工程执行编译链接命令过程中,举例 cd build cmake .. make -j12 能够make成功100%,但是在链接过程中终端打印信息提示 warning: XXX is deprecated [-Wdeprecated-declarations] \\ XXX代表某函数 原因 这是一句警告,简单来说就是在你代码中使用的XXX函数已经被弃用了。 具体发生原因暂时不清楚,可能,我说的是可能,新链接的某个库对你在头文件定义的XXX函数,函数名字进行了替换 解决 warning不影响

weixin_42156097的博客 1万+

VC获取系统时间、程序运行时间

1. time_t time(time_t* timer); 功能: 该函数根据系统时钟, 返回自UTC时间1970.1.1.00:00:00以来的秒数, 或者-1表示错误;   参数: timer指向存储时间的指针. 如果为空, 不存储返回值. 如, 可这么使用: time_t ltime = time(NULL); 说明: VC2005中, time是对_time64的封装,

生命不息, 战斗不止! 3843

VS2005编译was declared deprecated警告

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

qiuzhuoxian的专栏 914

关于在VS2005编译出现was declared deprecated警告的问题

VS2005编译代码,有时会遇到类似如下的警告: warning C4996: 'strcat' was declared deprecated. 通常这类警告都是由于调用了字符串相关函数引起的。虽然这警告无伤大雅,仅仅只是说使用的函数已过时(deprecated),但看着实在别扭,且看看ms为什么要设置成这样。    搜索了一下ms的网站,找到了结果。ms认为以前的c/c++库中有一部分函数不够安全,希望程序员可以使用他们的替代安全库(Safe Library)来避免不必要的隐患。整个原文请点击以下链

430

《转》在VS2005编译was declared deprecated警告

为什么80%的码农都做不了架构师?>>> ...

weixin_34234721的博客 234

VS2005:declared deprecated warning问题

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

困兽犹斗的专栏 4269

VS2005 出现警告warning C4996: strcpy was declared deprecated 的解决办法

VS2005 出现警告warning C4996: strcpy was declared deprecated 的解决办法

Programmer And Coder 2888

VS2005:declared deprecated warning问题——strcpy_s和strcpy区别

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

DaLei的专栏 3696

VS2005 出现warning C4996: strcpy was declared deprecated

      在使用VC 2005 的开发者会遇到这样的问题,在使用std命名空间库函数的时候,往往会出现类似于下面的警告:    warning C4996: strcpy was declared deprecated        出现这样的警告,是因为VC2005中认为CRT中的一组函数如果使用不当,可能会产生诸如内存泄露、缓冲区溢出、非法访问等安全问题。这些函数如:strcpy、str

码农的菜园子 3353

VS2005编译VC6的工程,warning C4996: strcpy was declared deprecated

<br />在使用VC 2005 的开发者会遇到这样的问题,在使用std命名空间库函数的时候,往往会出现类似于下面的警告:    warning C4996: strcpy was declared deprecated <br /><br />出现这样的警告,是因为VC2005中认为CRT中的一组函数如果使用不当,可能会产生诸如内存泄露、缓冲区溢出、非法访问等安全问题。这些函数如:strcpy、strcat等。<br /><br />对于这些问题,VC2005建议使用这些函数的更高级的安全版本,即在这些函

周江涛的专栏 1519

warning C4996: '_snprintf' was declared deprecated 警告信息的消除方法

使用VS2005编译如下语句: _snprintf(gs_LastErr, sizeof(gs_LastErr) - 1, "%s: NULL device %s\n", sFunc, !pDev ? "handle" : "context"); vsnprintf(gs_LastErr, sizeof(gs_LastErr) - 1, sFormat, argp); 提示如下警告

wwfish的专栏 1819

warning C4996: 'sprintf' was declared deprecated see declaration of 'sprintf'

转载自http://hi.baidu.com/jetqu2003/blog/item/a42d8dcb8fdead19bf09e6e3.html 一、找到一个方法: VC6---选项Project | Configuration Properties | C/C++ | Preprocessor | Preprocessor Definitions 添加_CRT_SECURE_NO_DE

tech_ant的专栏 858

关于VS2003中的Warning:strcpy was declared deprecated.

 VC2005/2003中认为CRT中的一组函数如果使用不当,可能会产生诸如内存泄露、缓冲区溢出、非法访问等安全问题。这些函数如:strcpy、strcat等。    对于这些问题,VC2005建议使用这些函数的更高级的安全版本,即在这些函数名后面加了一个_s的函数。这些安全版本函数使用起来更有效,也便于识别,如:strcpy_s,calloc_s等。在网上搜索到的最常用的解决方案,那就是定义

liulian1111的专栏 577
上一篇: 安装PC-LINT的方法
下一篇: Windows Mobile 6.0 Unable to start program"%CSIDL_PROGRAM_FILES%/XXX/XXX.exe
tidavery
博客等级 码龄16年 83粉丝 9原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值