在C中scanf
和scanf_s
的区别是什么?我使用的是visual Studio13,当我尝试使用scanf
时,它总是给我错误。
发布于 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
https://stackoverflow.com/questions/23976639
复制相似问题