加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我应该在MSVC – C上使用安全版本的POSIX函数吗?

发布时间:2020-12-16 03:33:34 所属栏目:百科 来源:网络整理
导读:我正在编写一些C代码,预计将在多个编译器上编译(至少在MSVC和GCC上).因为我是C语言的初学者,所以我打开了所有警告并且警告被视为错误(GCC中的错误和MSVC中的WX)以防止我犯下愚蠢的错误. 当我编译一些在MSVC上使用strcpy的代码时,我得到警告,比如 警告C4996:
我正在编写一些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连接时会导致麻烦. ..

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读