scanf_s不是这样用的你要写成下面这種(后面的40是指最多要输入多少个字符)
另外scanf_s遇到空格也会以为是新的输入,所以如果你的某项内容中如果有空格要写成类似这种
你对這个回答的评价是?
或许是清楚键盘缓存区的原因你试试在两个scanf_s()函数中间插入一行代码:
满意请采纳,不满意欢迎追问~
你对这个回答的評价是
scanf_s不是这样用的你要写成下面这種(后面的40是指最多要输入多少个字符)
另外scanf_s遇到空格也会以为是新的输入,所以如果你的某项内容中如果有空格要写成类似这种
你对這个回答的评价是?
或许是清楚键盘缓存区的原因你试试在两个scanf_s()函数中间插入一行代码:
满意请采纳,不满意欢迎追问~
你对这个回答的評价是
scanf()函数是标准C中提供的标准输入函数用以用户输入数据
scanf_s()函数是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数,从vc++2005开始VS系统提供了scanf_s()。在调用该函数时必须提供一个数字以表明最多读取多少位字符。
scanf()在读取数据时不检查边界所以可能会造成内存访问越界:
//例如:分配了5字节的空间但是用户输入了10字节,就会导致scanf()读到10個字节
char buf[5]={'\0'};
scanf("%s", buf);
//如果输入则5以后的部分会被写到别的变量所在的空间上去,从而可能会导致程序运行异常
以上代码如果用scanf_s()则可避免此问题:
注: scanf_s最后一个参数n是接收缓冲区的大小(即buf的容量),表示最多读取n-1个字符.
PS: 很多带“_s”后缀的函数是为了让原版函数更安全传入一个囷参数有关的大小值,避免引用到不存在的元素防止hacker利用原版的不安全性(漏洞)黑掉系统。
scanf()不会检查输入边界可能造成数据溢出。
scanf表示从键盘输入指定格式的数据如:scanf("%d",x);指从键盘给x输入一个int型(整型)数据;scanf("%f",x);指从键盘给x输入一个float型(实型)数据;
因为带“_s”后綴的函数是为了让原版函数更安全传入一个和参数有关的大小值,避免引用到不存在的元素防止hacker利用原版的不安全性(漏洞)黑掉系統。
scanf_s提供更安全一些的机制 以防止溢出 ,对于 %s , %S 等 变量地址后要紧跟一个参数,以表示其大小如:
你还可以用getchar()单个字符输入,这样可鉯很好解决文件换行读入问题