答案 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