scanf与scanf_s的区别

自从用VisualStudio2015之后就不愿再去使用Visual C++6.0了,但是最近在学数据结构图时,总是在字符的连续输入遇到困惑.

使用VS都知道,要用scanf_s对键盘读入数据。

scanf("%c,%c",&a,&b);可以对字符连续输入;

如果是循环输入,在下添加getchar();这样一个语句吞噬掉输入时的回车即可;

但是同样用for(int i=0;i<10;i++){

              scanf_s("%c,%c",&a,&b);

               getchar();

          }

确达不到相同的结果,debug时老是读入一个‘ -52 ?’什么的一个不知道是什么的鬼东西,使得下次输入前就读入这样一个无效数据。如:出现下面类似的样子,后面直接一步调到低了。

我一直以为是关于没有吞噬掉回车的问题,认真看了对scanf_s输入后,事实并不是这样的,scanf_s与scanf的还是有区别的,

毕竟是更新之后的版本。相比scanf_s安全,因为 scanf_s() 是针对“ scanf()在读取字符串时不检查边界,可能会造成内存泄

露”,scanf_s()用于读取字符串时,必须提供一个数字以表明最多读取多少位字符,以防止溢出。

因此

for(int i=0;i<10;i++){

              scanf_s("%c,%c",&a,1,&b,1);

               getchar();

          }

这样就没有问题了。

  • 29
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值