关于缓冲区溢出的一段代码
我已经大概知道了了缓冲区溢出的原理了。有下面一段代码:
#include <stdio.h>
#include <string.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
int i=1;
char buf[2]={'a','b'};
printf("&i is:%p\n",&i);
printf("&buf[0] is:%p\n",&buf[0]);
printf("&buf[1] is:%p\n",&buf[1]);
strcpy(buf,"xy");
printf("buf[0] is:%c\n",buf[0]);
printf("buf[1] is:%c\n",buf[1]);
printf("i is:%d\n",i);
return 0;
}运行之后,在内存中
&i is:0022FF44
&buf[0] is:0022FF42
&buf[1] is:0022FF43
buf[0]变成了x,buf[1]变成了y,字符串截断符覆盖了i,改写了i的值。
我想问的是:为什么i会变成0,这个0是怎么算出来的?
如果把strcpy(buf,"xy");改成strcpy(buf,"xyz"),输出结果i是122,这个122又是怎么算出来的?
我就是不知道计算方法,谁能够详细给我解释一下。
谢谢。