我正在编写一些C代码,预计将在多个编译器上编译(至少在MSVC和GCC上).因为我是C语言的初学者,所以我打开了所有警告并且警告被视为错误(GCC中的错误和MSVC中的WX)以防止我犯下愚蠢的错误.
当我编译一些在MSVC上使用strcpy的代码时,我得到警告,比如
警告C4996:’strcpy’:此函数或变量可能不安全.请考虑使用strcpy_s.要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS.详细信息请参见在线帮助.
我有点困惑.许多常用功能在MSVC上已弃用.我应该在Windows上使用此安全版本吗?如果是的话,我应该把strcpy包裹起来,
my_strcpy() { #ifdef WIN32 // use strcpy_s #ELSE // use strcpy }
有什么想法吗?
解决方法
有关此主题的讨论有很多很多.我敢肯定,像strncpy,strlcpy等常见的嫌疑人会再次出现在这里.只需在搜索框中键入“strcpy”,然后阅读一些较长的线程即可获得概述.
我的建议是:无论您的最终选择是什么,最好遵循DRY原则并继续按照my_strcpy()的示例进行操作.不要在您的代码中抛出原始调用,使用包装器并将它们集中在您自己的字符串处理库中.如果您稍后改变主意,这将减少整体代码(样板),并且您有一个中心位置可以进行修改.
当然,这会打开一些其他的蠕虫病毒,特别是初学者:内存处理责任和界面设计.这个主题本身和5个人都会给你10个如何做的建议.中央库通常具有很好的效果,它会强制执行一个决策,您将在整个代码库中执行该决策,而不是使用模块A中的方法a和模块B中的方法b,当您尝试将A与B连接时会导致麻烦. ..