scanf的安全输入问题

引入:华为的一道经典面试

scanf的安全输入问题

用老师的话说,如果你脱口而出答案是5,那么你连C语言们都还没摸到,眼尖的同学会看出数组溢出了,但至于结果怎么算却搞不明白。至于大神吗,分分钟得出答案。好了别的不多扯,我们看看这个到底怎么算。
结果:i=6776421
进入到内存中分析:
连续定义的变量,内存地址一般也相邻
首先依次在栈区为变量开辟空间(注意方式,整形是4个字节以计算,char型一字节一计算)
scanf的安全输入问题

越界后
scanf的安全输入问题

所以最后的结果是676665的十进制6776421

那么更安全的输入是??
fgets!!
不仅可以用于文件读取,也可以从输入缓冲区中直接取

scanf的安全输入问题