#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
int i = 1;
char buf[4];
strcpy(buf, "AAAA");
printf("%d\n", i);
return 0;
}
以上代码打印结果是 0;
按照地址分配原则:
在栈上先给i 分配4个字节
再给buf分配4个字节;
高地址放高字节,
低地址放低字节,
|buf0|---
|buf1|buf
|buf2|4byte
|buf3|---
| i | 4byte(高地址)
======
调用strcpy时由于长度差一位,
发生覆盖i的现象,i被字符串最后 一位的'\0'覆盖
于是i被赋0;
同理下面的情况却有所不同
int main()
{
int i = 2087512;
char string[10];
strcpy(string, "0123456789");
cout << i << endl;
system("PAUSE");
}
当我的用char string[10] 时正常
char string [9] 正常
...
[5] 正常
一直到长为5都正常,
用 char string[4] 覆盖
char string[3] 正常
char string[2] 覆盖
char string[1] 覆盖
这是怎么个现象,是不是和地址对齐有关啊,
好像对齐的也没什么规律,哪位大侠帮忙解释一下,多谢了。
刚申请的账号没有分,老号被封了(未知原因),所以还请大家无私一下,也当提升技术了,小弟多谢了。。