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与scanf_s的区别_第1张图片

我一直以为是关于没有吞噬掉回车的问题,认真看了对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();

          }

这样就没有问题了。

你可能感兴趣的:(C语言)