最近在看 C和指针 在做第9章第3个编程题时,遇到了一个奇怪的问题,原题如下
编写一个名叫my_strcpy的函数,它类似于strcpy函数,但它不会溢出目标数组。复制的结果必须是一个真正的字符串。
我在centos上编写了程序:
#include <stdio.h>
char *my_strcpy(char *buff, const char *str, int buffLen)
{
char *temp = buff;
while ((temp < buff + buffLen) && (*str != '\0'))
{
*(temp++) = *(str++);
}
*(temp) = '\0';
return buff;
}
int main(int argc, char **argv)
{
char buff[10];
const char *str = "hello world";
printf("%p\n", str);
my_strcpy(buff, str, 10);
printf("%p\n", str);
printf("buff:%s\nstr:%s\n", buff, str);
printf("length of buff is : %d\n", strlen(buff));
getchar();
return 0;
}
运行时发现str的地址发生了改变, 打印信息如下:
0x80485a4
0x8048500
buff:hello worl
str:
length of buff is : 10
有高手能告诉我为什么上str的地址会发生改变吗?非常感谢。