入门刚开始学C,就发现scanf()是不安全的

scanf()在C当中是不安全的一个函数,故而在VS2013及以上版本都将scanf()替换成了scanf_s()函数,截图就能够看出,


scanf()函数在linux系统中还是可以运行的,我学习安装了Ubuntu15.04版本,在里面运行了一个小程序,定义的str2为10个长度的字符串,输入的时候我输入了14个长度的字符串,但是答应结果是str2把我输入的全部打印出来,内存溢出还能继续存储??这是一个疑问


与是我试着尝试去改变str1,str2,str3的位置,看下结果是不是一样的,首先看下地址内存位置,


可以看出没存是连续的,所以我把高内存的和低内存进行交换,交换后内存地址如下


说明替换后的内存地址并不会套用交换前的内存地址,而是会继续在后面续接或者另存,如果你再次运行程序,内存将被替换,


此时再次输入,同样会存储进入超过数组大小的数据,


为了验证,我于是打开了cen os7.0版本,在cenos 7.0版本中换了位置 就变成这样了,传说中的str2的值不见了,


我把str1换成变量,输入再试了一下,还是老样子,不知道是不是版本的原因,并不会玩高内存和地内存跑,只是超出内存后会使得内存不会溢出,从而产生漏洞!!我会继续研究这个scanf()函数,有新的进展会给大家透露出来

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