#include
#include
int main(int argc, char *argv[])
{
int i = 1; // 0xbfffbec4
char buf[4]; // 0xbfffbec0
strcpy(buf, "AAAA"); //&buf[4] 之地址是 0xbfffbec4
printf("%d\n", i);
return 0;
}
// 变量i,buf在栈中, x86 的堆栈是向下生成的,buf后面有个‘\0’的结束符,正好覆盖了i的值 所以打印结果是0
int main(int argc, char *argv[])
{
char buf[4]; // 0xbfffb2f4
int i = 1; //后定义 i 0xbfffb2f0
strcpy(buf, "AAAA"); //&buf[4] 0xbfffb2f8
printf("%d\n", i);
return 0;
}
结果是 '1'
定义字符数组的时候最好多定义几个字节。以免造成错误.
阅读(538) | 评论(0) | 转发(0) |