字符串截取问题
#include <iostream>
#include <stdio.h>
int main(void)
{
char s[]="123456789";
char d[]="123";
strcpy(d,s);
printf("%s,%s",d,s);
return 0;
}
结果:
123456789,56789
解析:
在内存中分配如下:
copy前 copy后
b->1 ------> 1
2 2
3 3
\0 4
s->1 ------> 5
2 6
3 7
4 8
5 9
6 \0
7 7
8 8
9 9
\0 \0
在栈中,变量是分配是按照栈低到栈顶的,栈低地址比栈顶地址大,因为b分配空间不够,因此,在copy时向下占据a空间,则copy后内存分配如上图。