浅析scanf_s与scanf的区别

由于我们的课程需要今天我安装了Visual Studio 2019。

迫不及待地尝试后,一通操作写出了如下代码:

#include <stdio.h>
int main()
{
 char a[10];
 scanf("%s", a);
 printf("%s", a);
 return 0;
}

 

结果:

经过我仔细地研究(baidu),emmmmm,原来确实有点东西。

原来在原来的ANCI C中,没有scanf_s这个东西,后来内存泄漏的事件频频发生,就出现了scanf_s。

scanf_s的功能本质上与scanf相同,但scanf_s优化了scanf读取数据时不检查数据边界的问题。

经过我的一通操作修改了一下代码如下:

#include <stdio.h>
int main()
{
  char a[10];
  scanf_s("%s", a,10);
  printf("%s", a);
  return 0;
}

 

这里scanf_s后面多了一个10,意思是只能输入9个字符,因为最后一个位置要存'\0'

例:

输入:123456789时会将9个数字全部存进去。

输入:1234567890时只会存进前9个数。

 

如有错误,请多指正。

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00