一. 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()会检查边界,如果数据溢出,则会不输出数据