【面试题】兄弟,这是什么原理?ULONG* tet1 (ULONG *)test多谢啊UCHAR haha 214UCHAR * test &hahap
【面试题】兄弟,这是什么原理?ULONG* tet1 = (ULONG *)test;多谢啊
UCHAR haha = 214;
UCHAR * test = &haha;
printf("%ld", *test);
ULONG* tet1 = (ULONG *)test;
printf("%ld", *tet1);
结果:
214
-858993450
[解决办法]
内存越界读取
本来uchar(214)保存在1字节内存中,十六进制D6
现在你把它强制转换为ulong,也就是说要读4个字节或者更多字节的内存空间(具体读取多少根据系统不同),最低位就是D6,其他位是随机数,所以读出来的数据是随机的,但是它的最低一个字节肯定是D6
[解决办法]
Test是uchar类型的指针,其内容为一个字节的内容,直接使用*test取出一个字节内容,tet1是ulong类型的指针,其内容为四个字节存储的内容,使用*tet1取出四个字节的内容,tet1是由test强制转换的,实际上test只有一个字节的有效值,即tet1只有一个字节的有效值,但是使用*tet1时,编译器会取出四个字节的内容,即会取出一字节有效值,三字节无效值,所以总体显示为一个不确定的值
