scanf& amp; scanf_s

时间:2014-06-01 03:59:45

标签: c

C中的scanfscanf_s之间的区别是什么?我正在使用visual studio 13,当我尝试使用scanf时,它会一直给我错误。

1 个答案:

答案 0 :(得分:0)

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

  

scanf,_scanf_l,wscanf,_wscanf_l的这些版本具有安全性   增强功能,如Security Features in the CRT

中所述      

许多旧的CRT功能都有更新,更安全的版本。如果安全   功能存在,较旧的安全性较低的版本标记为   已弃用,新版本具有_s(“安全”)后缀

     

在这种情况下,“弃用”只意味着函数的使用不是   推荐的;它并不表示该功能已被安排   从CRT中移除。

     

安全功能不会阻止或纠正安全错误;   相反,它们在发生时会发现错误。他们表演更多   检查错误情况,如果发生错误,则调用它们   错误处理程序(请参阅参数验证)。

     

例如,strcpy函数无法告知字​​符串   复制对于目标缓冲区来说太大了。 然而,它   安全对应物strcpy_s将缓冲区的大小视为   参数,因此它可以确定是否会发生缓冲区溢出。如果你   使用strcpy_s将十一个字符复制到十个字符的缓冲区中,   这是你的错误; strcpy_s无法纠正你的错误,   但它可以检测到您的错误并通过调用无效通知您   参数处理程序。

Ref