报错原因:
- 相信不少人问过别人这种报错的解决方案,他们都会提到一个叫做"SDL"的名词,SDL全称为安全开发生命周期(Security Development Lifecycle, SDL),微软针对
scanf
的缓冲区溢出问题做了_s的改动,目的是为了防止缓冲区溢出。举个例子,scanf("%s", str)
,定义了char str[5];
但是输入的时候输入了5个以上的字符,就会造成缓冲区溢出,所以scanf_s
这个微软定义的函数是为了防止这样的问题出现,scanf_s
函数不同于scanf
,它有三个参数,第三个参数就是缓冲区大小,对于上面的实例,用_s系列的安全函数写法为scanf_s("%s", str, 5)
。 - 这种_s系列的函数有很多,凡是接受用户输入并且存在缓冲区的函数都有,比如
gets_s
等。
第一种解决方案:
第二种解决方案:
注意事项
不过要注意的是,微软针对缓冲区的溢出做了改动,所以devc++里面不会出现这样的报错,_s系列是VS特有的,如果你在dev里面用同样会报错。