首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >scanf与scanf_s的区别

scanf与scanf_s的区别
EN

Stack Overflow用户
提问于 2014-06-01 11:59:45
回答 1查看 552关注 0票数 0

在C中scanfscanf_s的区别是什么?我使用的是visual Studio13,当我尝试使用scanf时,它总是给我错误。

EN

回答 1

Stack Overflow用户

发布于 2014-06-01 12:01:15

两者都从标准输入流中读取格式化的数据。“_s”是微软的“安全”版本。

这些版本的scanf、_scanf_l、wscanf和_wscanf_l具有安全增强功能,如Security Features in the CRT中所述:

许多旧的CRT函数都有更新、更安全的版本。如果存在安全函数,则较早的、不太安全的版本将被标记为不推荐使用,而新版本将带有_s (“安全”)后缀

在这种情况下,“不推荐使用”只是表示不推荐使用某个函数;它并不表示计划从CRT中删除该函数。

安全函数不能防止或纠正安全错误;相反,它们会在错误发生时捕获错误。它们对错误条件执行额外的检查,在出现错误的情况下,它们调用错误处理程序(请参见参数验证)。

例如,strcpy函数无法判断它正在复制的字符串对于其目标缓冲区是否太大。但是,的安全副本strcpy_s将缓冲区的大小作为参数,因此它可以确定是否会发生缓冲区溢出。如果您使用strcpy_s将11个字符复制到10个字符的缓冲区中,这是您的错误;strcpy_s不能纠正您的错误,但它可以检测您的错误,并通过调用无效参数处理程序通知您。

Ref

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23976639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档