目录
一.scanf()和 scanf_s()主要有以下几个区别:
一.scanf()和 scanf_s()主要有以下几个区别:
1.安全性
- scanf()函数不进行检查输入边界,这可能导致数据溢出等问题
- scanf_s()函数进行检查输入边界,确保不会读取超过用户为缓存区分配的字符数,大大提高了安全性
2.使用方式
- scanf()函数通常只读取一个格式字符串
- scanf_s() 需要提供两个参数:一个是用于存储输入的缓冲区,另一个是表示要读取的最大字符数。
3.平台的依赖性
- scanf()是C语言的标准库函数,适用于大多数支持C语言的平台上。
- scanf_s()是微软的专有扩展,可能在非MSVC编译器中不支持。
4.性能
- scanf_s()函数性能较强,因为它一定程度上避免了不必要的内存分配
二.scanf_s()函数和scanf()函数的简单示例
-
scanf函数
1.scanf(“输入控制符”,输入参数);
%d 读入十进制整数
%o 读入八进制整数
%x,%X 读入十六进制整数
%c 读入一个字符
%s 读入一个字符串
%f,%F,%e,%E,%g,%G 用来输入实数,可以用小数形式或指数形式输入。
%u 读入一个无符号十进制整数
h用于d,o,x前,指定为short
l用于d,o,x前,指定为long,用e,f 前指定为double2,scanf(“非输入控制符 输入控制符”,输入参数);
3.通过scanf进行赋值
1 指定输入数据所占列宽scanf(“%3d%3d”,&a,&b)
![]()
2,%后面加‘*’用来抑制输入。scanf(“%2d%*3d%2d”,&a,&b)
![]()
3, 输入数据流分隔。根据格式字符的含义从输入流中取得数据,当输入流中数据类型与格式字符要求不符时,就认为这一项结束。
4,隐示分隔符。空格、制表符’\t’,换行符/回车键’\n’都是C语言认定的数据分隔
符。
-
scanf_s()函数
1.使用方法都大致相同
2.关键与scanf()函数的不同是,scanf_s函数具有更高的安全性,一定程度上避免了缓存区的溢出问题
例: