scanf()与scanf_s()的用法 、异同与使用实例

一. scanf()与scanf_s()的解释

? ? scanf_s()函数是Microsoft公司VS开发工具提供的一个功能与scanf()相同的安全标准输入函数。在调用该函数读取字符数组时,必须提供一个数字以表明最多读取多少位字符

二.scanf()与scanf_s()的用法相同点

? ? (1)均是把输入的字符串转换成整数、浮点数、字符或字符串

? ? (2)在读取基本变量类型的值时,在变量类名前加上一个&

? ? (3)在把字符串读入字符数组中时,均不需要加&,因为数组变量名就表示一个地址

三.scanf()与scanf_s()的用法不同点

? ? ? 再用字符数组获取字符串时,二者的参数列表不同

? ? (1)对于scanf(),参数列表仅为 数组名

? ? ? 实例如下:

? ? ? ? ? ? ? ? ?char?name[3];

? ? ? ? ? ? ? ? ? scanf("%s",name);//name为数组名,本身就是一个地址,如果输入libai(字符串),li会被保存到数组中,()格外注意:字符数组的最后一个存储单元上必须 要存储‘\0’,其他部分会被写到别的变量所在空间,会引起程序运行异常,但是存到数组中的部分会显示
? ??(2)对于scanf_s(),参数列表为? 数组名(第一参数)和 数组容量n(第二参数)
? ? ? ? ? ? ? char?name[3];
? ? ? ? ? ? ?scanf_s("%s",name,3);//需要注意,3必须要有,表示读取字符个数,其中包括“\0”,如果没有,系统会报错,说没有第二参数,如果输入的为liba,数据溢出,不会显示
?
? ? ?使用原因:scanf()不会检查边界,可能会造成数据溢出,有些***会利用这一漏洞黑进系统,而scanf_s()会检查边界,如果数据溢出,则会不输出数据
?
?

??

上一篇:【游戏】基于matlab GUI贪吃蛇游戏(难度、地图、音乐)【含Matlab源码 1160期】


下一篇:(七)pytest+allure+jenkins+SVN配置