测试环境:VS2012 Update4
测试语言:C++
测试代码:
#include<stdio.h>
int main(int argc,char* argv[])
{
char str[20];
scanf_s("%s",str,18);
return 0;
}
在第五行下断点,断下之后我们观察一下 str
地址:0x003DF9B8
内容如下,处于未初始化状态
接着F11进去,进入
scanf_s
函数
:
/***
*int scanf_s(format, ...) - read formatted data from stdin
*
* Same as scanf above except that it calls _input_s_l to do the real work.
* _input_s_l has a size check for array parameters.
*
*******************************************************************************/
int __cdecl scanf_s (
const char *format,
...
)
{
va_list arglist;
va_start(arglist, format);
return vscanf(_input_s_l, format, NULL, arglist);
}
从注释中我们可以看到 scanf_s的功能是从stdin中读取格式化的数据
TA 和 scanf 的区别是用了_input_s_l函数,而这个函数有一个长度检查的功能(scanf用的是 _input_l)。
format :参数格式