通配符之间加上19,限制长度防止溢出。

内存布局,可以直接猜出来缓存区大小。
只输入0-9,遇到别的字符直接截断。

遇到除了059a之外截断

不让输入8

不让输入8。
一个错误。

n未初始化,是一个残留值,即给n分配了个区域,之前这个区域是啥东西,未初始化就是什么值。
如果这里的n是个1234,那输入的内存就会存到1234这个地址当中去。因为scanf(“%d”,&n),第二个参数应该是个地址。而现在n现在是什么他就会以整数写入n这个地址,如果是不能写入的区域就直接C05崩溃,内存访问异常(无权限,系统保留,根本没分配)。
所以初始化很重要。

输入999直接覆盖666,999为999,000,因为这里是short int,而我们的这个是%d,可执行代码。
这个程序

输出的是0019ff2c 000003e7,因为19ff28开始个字节存的是19ff2c即紧跟着的m的地址,在n的这个值处输入999,等于是覆盖掉m的东西。
关于数据对齐

可以看到虽然存的都是一个char,但是每个都占4个字节。
考虑复用性。

计划内转换。转换存在与否,比较精度,即数据存储位数的高低。