<s>scanf_nx 在_p 读入_v 时_Ng 到底_d 发生_v 了_u 什么_r</s>
<s>引用_v 2_m 楼_n 寻_v 开心_a 的_u 回复_vn :_w 你_r 这样_r 看_v 不_d 出来_v 问题_n ，_w 做_v 测试_vn 就_d 要_v 做成_v 能_v 发现_v 问题_n 的_u union_nx M_nx {_w long_a long_a int_nx ll_nx ;_w int_nx n_nx [_w 2_m ]_w ;_w short_n s_nx [_w 4_m ]_w ;_w char_nx c_nx [_w 8_m ]_w }_w u_nx ;_w 做成_v 这样_r 的_u 一_m 个_q 联合体_n ，_w 然后_c 你_r 再_d 测试_v 你_r 的_u 代码_n 去_v 先_d 说_v 我_r 认为_v 的_u 答案_n scanf_nx 第一_m 个_q 字符_n 串_n 指定_v 了_u 后面_f 的_u 内容_n 的_u 格式_n ，_w 第二_m 个_q 开始_v 起_f ，_w 都_d 是_v 一_m 个_q 一_m 个_q 的_u 内存_n 地址_n 按照_p 指定_v 的_u 格式_n ，_w 把_p 读入_vn 数据_n 放到_v 指定_v 的_u 内存_n 当中_f 去_v ，_w 在_p 这个_r 过程_n 当中_f 并_d 没有_d 做_v 内存_n 地址_n 的_u 安全性_n 检测_vn ，_w 是_v 假定_v 你_r 给_v 的_u 地址_n 都_d 是_v 对_a 的_u 你_r 指定_v 要_v 读_v 入_v 一_m 个_q long_nx int_nx （_w windows_nx 下_f long_nx int_nx 和_c int_nx 都_d 是_v 32_m 位_q 的_u ）_w ，_w 但是_c 你_r 传递_v 给_v 他_r 的_u 是_v 一_m 个_q char_nx 类型_n 的_u 地址_n 这样_r 有_v 没有_v 问题_n ？_w</s><s>有_v 问题_n ，_w 只是_d 未必_d 显现_v 出来_v 。_w</s><s>windows_nx 当中_f ，_w int_nx 是_v 4_m 个_q 字节_n ，_w 低位_n 字节_n 在_v 前_f ，_w 高位_n 字节_n 在_p 后_f 因此_c 读_v 入_v 一_m 个_q 整数_n 的_u 时候_n ，_w 如果_c 不_d 超过_v 255_m 那么_c ，_w 它_r 所_u 占据_v 的_u 有效_a 地址_n 就_d 是_v char_nx 所在_n 的_u 空间_n ，_w 超出_v 的_u 时候_n 才_d 占据_v 了_u 更_d 高_a 地址_n 的_u 空间_n 为_v 测试_v 这_r 点_q ，_w 你_r 定义_v 一_m 个_q char_nx c_nx 【_w 4_m 】_w 这样_r 的_u 数_n 组_n ，_w scanf_nx （_w “_w %_w d_nx ”_w ，_w c_nx ）_w ；_w 这样_r ，_w 你_r 输入_v 不同_a 的_u 数_n ，_w 然后_c 看_v c_nx 【_w 0_m 】_w ～_w c_nx 【_w 4_m 】_w 内容_n 的_u 变化_vn 就_d 可以_v 验证_v 这_r 一点_m 。_w</s><s>你_r 的_u 代码_n 可以_v 运行_v ，_w 并_c 感觉_v 没错_v ，_w 那_r 恐怕_d 只是_d scanf_nx 读取_v 的_u 数据_n 所_u 破坏_v 掉_v 的_u 内存_n 空间_n ，_w 并_c 没有_d 被_p 使用_v ，_w 效果_n 没有_d 显现_v 出来_v 而已_d char_nx a_nx =_w 0_m ；_w char_nx b_nx =_w 0_m ;_w char_nx c_nx =_w 0_m ;_w char_nx d_nx =_w 0_m ;_w scanf_nx (_w "_w %_w d_nx "_w ,_w &_w b_nx )_w ;_w 你_r 输入_v 65535_m ，_w 然后_c 看_v 看_v c_nx 和_c a_nx 的_u 值_n 是否_v 发生_v 变化_vn 了_y （_w 具体_ad 是_v a_nx 还是_c c_nx 变_v 了_y ，_w 取决于_v 编译_vn 器_n ，_w 大部分_m 编译_vn 器_n 会_v 把_p 栈_Ng 地址_n 做成_v 向_p 下_f 增长_v ，_w 也_d 就_d 是_v b_nx 的_u 地址_n 比_p a_nx 的_u 地址_n 低_a ，_w 所以_c b_nx 存放_v int_nx 的_u 时候_n ，_w 必然_d 向上_v 增长_v 覆盖_v a_nx 的_u 空间_n 。_w</s><s>）_w 或者_c 用_p 前面_f 给_v 的_u 那个_r union_nx 结构体_n ，_w 看_v 看_v 同_v 一_b 空间_n 下_f ，_w 不同_a 的_u 数值_n 变化_vn ，_w 就_d 知道_v 内存_n 占据_v 的_u 情况_n 了_y 例子_n 不_d 好_a char_nx str_nx [_w sizeof_nx (_w int_nx )_w ]_w =_w "_w "_w ;_w 然后_c scanf_nx %_w d_nx str_nx 可以_v 明确_ad 看到_v 操作_vn 结果_n</s>
