- 论坛徽章:
- 0
|
看第五章指针与数组的时候关于模拟库函数strcpy(char *s,char *t)的时候,我突然想到一个问题(菜鸟,大神别笑),那就是如果t存了一个很长长的字符串,当我们用*s++=*t++的时候,如果当初s分配的地址距离t的地址的区间小于t的长度,会不会发生s覆盖t的情况?
实际修改了下书上的例子,发现我的担心好像是多余的
代码
#include <stdio.h>
void strcpy(char *,char *);
main()
{
char *s;
char *t="I love you";
strcpy(s,t);
}
void strcpy(char *s,char *t)
{
int i;
i=0;
while(*s++=*t++!='\0')
{
printf("%p\n",s);
printf("%p\n",t);
}
}
结果
0x7ffff1b4a561
0x400629
0x7ffff1b4a562
0x40062a
0x7ffff1b4a563
0x40062b
0x7ffff1b4a564
0x40062c
0x7ffff1b4a565
0x40062d
0x7ffff1b4a566
0x40062e
0x7ffff1b4a567
0x40062f
0x7ffff1b4a568
0x400630
0x7ffff1b4a569
0x400631
0x7ffff1b4a56a
0x400632
貌似这两个变量的地址差的很远。。。。
接着我又改了一下上面的程序
代码
#include <stdio.h>
main()
{
char *s;
char *t;
printf("%p\n",s);
printf("%p\n",t);
}
结果
0x7fff59599fb0
(nil)
t的地址是空,得到上面例子的结果的时候,我在猜是不是编译器会给初始化和没有初始化的变量分配相隔很远的地址(可能是代码区,数据区之类的),以免我说的上面的情况出现,但是第二个例子的结果我又晕了? |
|