- 浏览: 204547 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (231)
- C++学习 (41)
- vc学习 (25)
- vc异常 (4)
- Flex (2)
- Ext (0)
- java学习笔记 (15)
- mysql学习笔记 (1)
- ibatis学习笔记 (7)
- struts1学习笔记 (1)
- hibernate学习笔记 (3)
- javascript学习笔记 (8)
- eclipse快捷键 (2)
- 英语学习 (1)
- cmd (1)
- eclipse 配置 (2)
- 其他 (4)
- JAVASE (34)
- firefox (1)
- linux (8)
- Apache (6)
- cms (22)
- jsuc (10)
- html (3)
- css (1)
- 作图 (2)
- vs2012 (2)
- 编码转换 (12)
- work_unicode (1)
- work_webbrowser (1)
- work_trade_quotes_login (1)
- c#学习 (38)
- wpf学习 (31)
- wpf快速学习 (1)
- VB学习 (1)
- NSIS (4)
- log4cpp (3)
- 学习web (1)
- 经验 (1)
- c_汇编 (1)
最新评论
warning C4996的分析
warning C4996: 'itoa': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _itoa. See online help for details.
首先,这只是一个warning,不更改也能编译通过。
micsoft对其内部函数有了更新,用最新的函数编译的程序,能够更好的 与micsoft后面的平台适应。
以下为转载
在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()
-------------------------------------------------------------------------------
将过去的工程用VS2005打开的时候。你有可能会遇到一大堆的警告:warning C4996。
比如:warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
原因是Visual C++ 2005使用了更加安全的run-time library routines。
新的Security CRT functions(就是那些带有“_s”后缀的函数):
http://msdn2.microsoft.com/en-us/library/wd3wzwts(VS.80).aspx
那么如何搞定这些警告呢:
方法一:手工将原来的旧函数替换成新的Security CRT functions。
方法二:屏蔽这个警告。
在预编译头文件stdafx.h里(注意:一定要在没有include任何头文件之前)定义下面的宏:
#define _CRT_SECURE_NO_DEPRECATE
或者#param warning(disable:4996)
方法二没有使用新的更安全的CRT函数,显然不是一个值得推荐的方法,可是你又不想一个一个地改。
那么还有一个更方便的方法:
在预编译头文件stdafx.h里(同样要在没有include任何头文件之前)定义下面的宏:
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
在链接的时候便会自动将旧函数替换成Security CRT functions。
注意:这个方法虽然使用了新的函数,但是不能消除警告(原因见红字),你还得同时使用方法二。。。
在网上搜索到的最常用的解决方案,那就是定义 _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下一个字符占2个byte)作为单位,而不是bytes(字节).
8. 记住所有的sizes(大小,非长度,缘由同上)包含了字符串结束符'/0'(即别忘了很多情况下size需要+1)。
9. 调试的时候监视数据0xfd。 (在调试版本下)0xfd将会被填充在数据(buffer,通常是字符串)的结尾处。如果运行非你所愿,可能会得到一个长度错误。
10. 检查所有的错误。 许多新函数相比旧函数,能返回(表示)错误信息(的数值)。
#define _AFX_SECURE_NO_WARNINGS // MFC
#define _ATL_SECURE_NO_WARNINGS // ATL
#define _CRT_SECURE_NO_WARNINGS // C
#define _CRT_NONSTDC_NO_WARNINGS // CPOSIX
#define _SCL_SECURE_NO_WARNINGS // STL
可以在编译选项中加入这些宏,需要注意的是有的文件是单独设置了自己的编译选项,只能用#pragma warning(disable:4996)
warning C4996: 'itoa': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _itoa. See online help for details.
首先,这只是一个warning,不更改也能编译通过。
micsoft对其内部函数有了更新,用最新的函数编译的程序,能够更好的 与micsoft后面的平台适应。
以下为转载
在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()
-------------------------------------------------------------------------------
将过去的工程用VS2005打开的时候。你有可能会遇到一大堆的警告:warning C4996。
比如:warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
原因是Visual C++ 2005使用了更加安全的run-time library routines。
新的Security CRT functions(就是那些带有“_s”后缀的函数):
http://msdn2.microsoft.com/en-us/library/wd3wzwts(VS.80).aspx
那么如何搞定这些警告呢:
方法一:手工将原来的旧函数替换成新的Security CRT functions。
方法二:屏蔽这个警告。
在预编译头文件stdafx.h里(注意:一定要在没有include任何头文件之前)定义下面的宏:
#define _CRT_SECURE_NO_DEPRECATE
或者#param warning(disable:4996)
方法二没有使用新的更安全的CRT函数,显然不是一个值得推荐的方法,可是你又不想一个一个地改。
那么还有一个更方便的方法:
在预编译头文件stdafx.h里(同样要在没有include任何头文件之前)定义下面的宏:
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
在链接的时候便会自动将旧函数替换成Security CRT functions。
注意:这个方法虽然使用了新的函数,但是不能消除警告(原因见红字),你还得同时使用方法二。。。
在网上搜索到的最常用的解决方案,那就是定义 _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下一个字符占2个byte)作为单位,而不是bytes(字节).
8. 记住所有的sizes(大小,非长度,缘由同上)包含了字符串结束符'/0'(即别忘了很多情况下size需要+1)。
9. 调试的时候监视数据0xfd。 (在调试版本下)0xfd将会被填充在数据(buffer,通常是字符串)的结尾处。如果运行非你所愿,可能会得到一个长度错误。
10. 检查所有的错误。 许多新函数相比旧函数,能返回(表示)错误信息(的数值)。
#define _AFX_SECURE_NO_WARNINGS // MFC
#define _ATL_SECURE_NO_WARNINGS // ATL
#define _CRT_SECURE_NO_WARNINGS // C
#define _CRT_NONSTDC_NO_WARNINGS // CPOSIX
#define _SCL_SECURE_NO_WARNINGS // STL
可以在编译选项中加入这些宏,需要注意的是有的文件是单独设置了自己的编译选项,只能用#pragma warning(disable:4996)
发表评论
-
manifest
2015-06-08 17:57 1881我遇到的问题: 将 Upload.exe Upload.exe ... -
log4CPP多线程支持的缺角(一)(转)
2015-06-01 10:59 1010log4CPP多线程支持的缺角 ... -
minizip压缩文件夹(转)
2015-06-01 10:26 2255#include <atlconv.h> / ... -
文件大小(转)
2015-06-01 10:08 494方法一: WIN32_FIND_DATA fi ... -
log4cpp环境变量
2015-05-13 15:32 677log4cplus.appender.DEBUG_MSG.Fi ... -
VC学习:log4cpp
2015-05-12 15:37 808基于LGPL开源项目 Log4cpp ... -
VC异常:File:write.c Line:67
2015-05-12 15:29 745VC异常:File:write.c Line:67 路径没找 ... -
C++异常:rethrow【转】
2015-05-08 15:20 421C++异常rethrow【转】 http://se.csai. ... -
VC异常:Free Heap block xxxxxxxx modified at xxxxxxxx after it was freed(转)
2015-05-08 15:18 1179Free Heap block xxxxxxxx modifi ... -
VC异常:Free Heap block XXXXXX modified at XXXXXX after it was freed(转)
2015-05-07 15:41 3071Free Heap block XXXXXX modified ... -
VC中关于 0xcccccccc、0xcdcdcdcd和 0xfeeefeee 异常值说明
2015-05-07 15:14 1165VC中关于 0xcccccccc、0xcdcdcdcd和 0x ... -
析构函数后,还可以调用函数成员
2015-05-07 15:13 885析构函数后,还可以调用函数成员 类的所有的函数成员的是编译时期 ... -
TerminateThread
2014-11-13 14:04 685TerminateThread. 如线程内部不涉及空间开辟, ... -
VC退出线程的方法(转载)
2014-10-23 17:39 732VC退出线程的方法 标题很简单,但是要讨论的地方不少; ... -
heap corruption detected错误解决方法调试方法以及内存管理相关(转载)
2014-10-23 16:57 1160heap corruption detected错误解决方法调 ... -
edit control字体背景颜色
2014-10-23 16:56 707edit control字体背景颜色 属性必须 readon ... -
richedit2使用
2014-10-23 16:42 673richedit2使用 1) 必须导入dll HINST ... -
win32 edit control字体颜色
2014-10-21 16:04 850win32 edit control字体颜色 INT_PTR ... -
::ReleaseDC(this->GetHWND(), hdc);
2013-11-29 18:02 563::ReleaseDC(this->GetHWND(), ... -
SetBkMode透明,需要重绘
2013-11-29 17:54 573SetBkMode透明,需要重绘
相关推荐
### C语言的常见错误分析及解决方案 #### 一、变量未声明就使用 **示例代码**: ```c void main() { x = 3; y = x; } ``` **编译器提示**: - `error C2065: 'x': undeclared identifier` —— x 未声明 - `...
在C++编程中,警告(Warning)虽然不会阻止程序的编译和运行,但它们通常意味着潜在的问题,可能会影响代码的可读性、维护性和性能。`warning 4786`是C++编译器(通常是Visual C++)发出的一个特定警告,提示标识符...
这个WARNING通常发生在FPGA的时钟网络上,当一些负载不是时钟引脚而是非时钟引脚时,ISE无法使用时钟模板来路由这些负载,从而可能导致时钟偏斜(skew)增大。解决这个问题的方案包括使用FPGA EDITOR来查看哪些负载...
### Quartus II 中常见Warning 原因及解决方法 #### 1. Found clock-sensitive change during active clock edge at time <time> on register "<name>" **原因:** 当时钟敏感信号(例如数据、使能端、复位、同步...
3. **分析原因**:理解为什么会出现这样的错误或警告,可能是语法错误、逻辑错误还是其他编程习惯问题。 4. **修复问题**:修改代码以消除错误或警告。 5. **测试验证**:重新编译和运行代码,确保问题已解决且不...
具体分析如下: 在mysql数据库连接时碰到Warning: mysql_fetch_array() expects …错误提示,根据我的经验这个是sql返回的query为空了,我们没有加己判断直接使用了. mysql_fetch_array()函数导致的,下面我们一起来看...
本文档总结了 Keil C 语言编程中常见的错误分析,涵盖了 Warning 280、Warning 206、Error 318、Error 237、Warning 16、Warning 6、Warning 206、Warning 1 和 Error 107 等错误类型,并提供了相应的解决方法。...
QuartusII 编译与仿真.warning 大解析 QuartusII 编译与仿真 warning 大解析是 QuartusII 的一个重要环节,对于 FPGA 设计者来说, warning 是一个常见的问题,如何正确地处理 warning 是非常重要的。本文将对 ...
《URLy Warning:高效监测网站更新的利器》 在当今信息爆炸的时代,我们常常需要关注多个网站以获取最新的资讯、学习资料或者商业信息。手动检查每个网站的更新显然是低效且耗时的。这时,一款名为"URLy Warning"的...
Quartus II 调试 Error 和 Warning 及解决办法 在 Quartus II 中,调试 Error 和 Warning 是非常常见的现象,了解这些错误和警告的原因和解决方法是非常重要的。下面我们将对这些错误和警告进行详细的解释和分析。 ...
我的keil5是MDK524版本,在使用JLink调试时出现JLink Warning:mis-aligned memory write:address:0x20000000,numbytes:2,alignment:2(halfword-aligned)的警告。找到c:\Keil_v5\ARM\segger(Keil安装目录)下的JL2...
C语言编程常见错误分析讲课讲稿 本文档讲解了C语言编程中常见的9种错误,包括未引用的局部变量、missing function-prototype、无法打开头文件、函数名称重复定义、未调用的函数、重复定义的地址、missing function-...
**URLy Warning v3.0 英文绿色免费版** URLy Warning是一款高效且实用的网站监测工具,专为用户设计以追踪他们关心的网站内容的更新情况。这个软件版本v3.0提供了英文界面,并且是免费的,无需安装,用户可以直接...
在本文中,我们将深入探讨这个问题,分析其原因,并提供解决方案。 首先,了解色彩配置文件(ICC Profile)是至关重要的。ICC Profile是一种标准化的方法,用于定义不同设备(如显示器、打印机和扫描仪)的颜色特性...
在使用PCL(Point Cloud Library)与QT结合进行点云数据可视化时,有时会遇到一些问题,例如在显示点云时出现"vtkOutputWindow"和"Generic Warning"的错误提示。这个问题通常涉及到PCL和VTK(Visualization Toolkit...
参考"解决问题:libpng warning: iCCP: known incorrect sRGB profile"[https://blog.csdn.net/WangJiankun_ls/article/details/79470739]文章,通过自己实践操作,得出结论,希望能帮助到你们
在IT领域,尤其是在图像处理和开发中,"libpng warning: iCCP: known incorrect sRGB profile" 是一个常见的问题,特别是在使用Qt库进行图像操作时。这个问题涉及到颜色配置文件(iCCP)和标准红绿蓝(sRGB)色彩...
2. **估计地震参数**:通过对地震波形的分析,系统能够估算出地震的规模(如里氏震级)、预期的地面运动强度以及地震波的传播方向等关键信息。 3. **预测地震影响范围**:结合地质构造信息和地震参数,可以预测哪些...