指针的运算

来源:百度知道 编辑:UC知道 时间:2024/06/09 10:05:19
char *t1;
char *t2;
char *p1="Tue Dec 21 15:58:10 2006";
char *p2="TUe Dec 28 12:01:02 2006";
for(i=4;i<7;i++)
{
*t1[i-4]=*(p1+i);
*t2[i-4]=*(p2+i);
}
为什么会有错啊

首先,楼上的已经说了,你的指针没有初始化,说得跟透彻一点,你没有开辟空间以备你后面做字符串复制用。
其次,
*t1[i-4]=*(p1+i);
*t2[i-4]=*(p2+i);
你对指针t1,t2进行了双重指针操作。而他们根本不是指针的指针。而仅仅是一个char类型的指针。由于不管是使用下标还是*对指针t1,t2结果都是等价的。取出的都是一个char,比如说t1[0]=='T',*t1也是'T',t1[2]=='e', *(t1+2)=='e'。你的*t1[i-4]已经对一个一重指针进行了二重指针操作,实际上的结果是t1[i-4]已经取出了一个字符,你再用*,就相当于把这个取出的字符的二进制表示当成一个地址值,然后把赋值号右边的值放进这个非法地址中,编译器为防止你这一操作会覆盖一些重要的系统值,当然报错了,你直接写
t1[i-4]=*(p1+i);
t2[i-4]=*(p2+i);就可以了。

t1,t2指针没有初始化!