C中的scanf
和scanf_s
之间的区别是什么?我正在使用visual studio 13,当我尝试使用scanf
时,它会一直给我错误。
答案 0 :(得分:0)
两者都从标准输入流中读取格式化数据。 “_s
”是微软的“安全”版本。
scanf,_scanf_l,wscanf,_wscanf_l的这些版本具有安全性 增强功能,如Security Features in the CRT:
中所述许多旧的CRT功能都有更新,更安全的版本。如果安全 功能存在,较旧的安全性较低的版本标记为 已弃用,新版本具有_s(“安全”)后缀。
在这种情况下,“弃用”只意味着函数的使用不是 推荐的;它并不表示该功能已被安排 从CRT中移除。
安全功能不会阻止或纠正安全错误; 相反,它们在发生时会发现错误。他们表演更多 检查错误情况,如果发生错误,则调用它们 错误处理程序(请参阅参数验证)。
例如,strcpy函数无法告知字符串 复制对于目标缓冲区来说太大了。 然而,它 安全对应物strcpy_s将缓冲区的大小视为 参数,因此它可以确定是否会发生缓冲区溢出。如果你 使用strcpy_s将十一个字符复制到十个字符的缓冲区中, 这是你的错误; strcpy_s无法纠正你的错误, 但它可以检测到您的错误并通过调用无效通知您 参数处理程序。