#include<stdio.h>
#include<string.h>
int main() {
char a[]="123456789";
char b[]="123";
strcpy(b,a);
printf("%s\n%s",a,b);
}
会输出
56789
123456789
因为a,b是局部变量,数组保存在堆栈中,而x86中的堆栈是满递减的,strcpy前堆栈如下:
** <-----%ebp
\0
9
8
7
6
5
4
3
2
1 <---a
\0
3
2
1 <---b <-----%esp
strcpy之后堆栈如下:
** <-----%ebp
\0
9
8
7
\0
9
8
7
6
5 <----a
4
3
2
1 <----b <----%esp
由上可以明显看出为什么会如此输出!
补充:X86系统是小端法存储,例如int a=0xa4c6e3f4; 保存在地址中为f4 e3 c6 a4 即高位保存在高地址 小的看起来麻烦
还有位大端法存储,上面的a为 a4 c6 e3 f4 即高位保存在低地址 大的看起来顺眼