时间:2010-07-24 21:31:06

标签: c++ windows visual-studio debugging

9 个答案:

答案 0 :(得分:34)

答案 1 :(得分:7)

这是这个问题的另一个答案。

#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4996)
#endif

        strcpy(destination, source);

#ifdef _MSC_VER
#pragma warning(pop)
#endif

答案 2 :(得分:6)

如果仅删除警告是您的目标......只需定义此_CRT_SECURE_NO_WARNINGS即可取消所有弃用警告。但这不会解决不安全的CRT功能的潜在问题。

如果您使用的是Visual Studio版本> = 2005,并希望以正确的方式修复这些警告...最简单的方法是在项目中#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT 1

没有任何进一步的代码更改,您可以观察到大多数警告是自动修复的。通过定义此窗口将自动调用大多数不安全CRT函数的安全重载函数。静态数组的缓冲区大小是自动计算的。

虽然动态分配的缓冲区不是通过这种方式修复的,但我们需要手动修复它们。有关详细信息,请参阅this link

以下是一种以编程方式更正示例的方法

strcpy_s(extList->names[i], length, extName); 

答案 3 :(得分:5)

答案 4 :(得分:4)

答案 5 :(得分:2)

答案 6 :(得分:2)

答案 7 :(得分:0)

如果只为Windows平台编译此代码,则最好使用这些功能的安全版本。但是,如果要在多个平台(linux,Aix等)上编译此代码,那么您可以使用_CRT_SECURE_NO_WARNINGS在Windows项目配置文件(例如.vcxproj)中禁用警告,或者,您可以使用类似的代码片段这个在.cpp文件中调用这些函数的地方。

#if _OS_ == _OS__WINDOWS
//secure function call
#else
//already written code
#endif

答案 8 :(得分:0)

根据消息中的建议,使用_CRT_SECURE_NO_WARNINGS禁用此警告。

ProjectProperties中的

- >配置属性 - > C / C ++ - >预处理器 - >预处理器定义,添加以下宏:

_CRT_SECURE_NO_WARNINGS