【发布时间】:2015-06-16 14:00:25
【问题描述】:
这不是您第一眼看到的重复。
Visual Studio 中的 strcpy() 弃用已为人所知几年,当您尝试将 C 代码从 GCC 移植到 MSVC 时,这是一个难题。
在 Visual Studio 2013 中,所有定义_CRT_SECURE_NO_WARNINGS 的变通方法都无法解决问题 - 编译仍然失败出现此错误(称为“警告”,但实际上是导致编译失败的错误)。
我的问题是在代码中是否有一种优雅的方法来解决它?
例如,这样的宏会对我有很大帮助:
#ifdef SOMETHING_THAT_INDICATES_ITS_MSVC_COMPILER
Some macro that makes the following substitution:
strcpy(dest, src) -> strcpy_s(dest, strlen(src), src)
#endif
你能告诉我吗:
- 如果您认为这是解决此可移植性问题的好方法?
- 如何正确编写这样的宏?
- 还有其他建议吗?
【问题讨论】:
-
定义
_CRT_SECURE_NO_WARNINGS然后继续。 -
strlen(src)应该是strlen(src)+1 -
_CRT_SECURE_NO_WARNINGS在 VS2013 中对我来说很好用。确保在预编译的头文件中或在C/C++::Preprocessor下的项目设置中定义它。 -
如前所述放入
_CRT_SECURE_NO_WARNINGS,或放入stdafx.h并重建。忽略微软的建议。 -
Everyone please read this 在让任何不聪明的 Microsoft cmets 认为 strcpy 不安全之前。
标签: c visual-c++ visual-studio-2013