这个程序应该有Runtime Error.
指针s1指向的内存不可写,但是你写了
能详细点吗?还不是很懂
首先,注意一下编程风格!
main()
{ char *s,*s1="here is";
char *s2="key";
s=s1; // 让s指向s1,即指向"here is"的首地址
while(*s1) // 让s1移动到"here is"的最后位置即'\0'
{
s1++;
}
while(*s1++=*s2++) // 把s2指向的内容"key"追加到"here is"后面.
{ } // 注意,此时的内存空间已变为"here iskey",'s'的后面已不是'\0'
s2=s; // 让s2指向s指向的内容,即"here iskey"的首地址
// 注意,s2指向的是首地址,这里还不用管它所面的内容是什么
while(*s2) // 让s2向后移,直到遇到'\0',这个位置是在'y'后面而不是's'后面
{ // 此时,s2指到"here iskey"后,而s始终指向的都是首地址'h'
s2++;
}
printf("%d\n",s2-s); // 通过上面的分析,s2-s显然等于10
printf("s=%s\n",s); // 以 %s 这种格式输出,只有当s遇到'\0'才结束输出,
} // 显然,s从'h'位置开始输出,直到遇到'y'后面的'\0'才结束输出
首先,注意一下编程风格!
main()
{ char *s,*s1="here is";
char *s2="key";
s=s1; // 让s指向s1,即指向"here is"的首地址
while(*s1) // 让s1移动到"here is"的最后位置即'\0'
{
s1++;
}
while(*s1++=*s2++) // 把s2指向的内容"key"追加到"here is"后面.
{ } // 注意,此时的内存空间已变为"here iskey",'s'的后面已不是'\0'
s2=s; // 让s2指向s指向的内容,即"here iskey"的首地址
// 注意,s2指向的是首地址,这里还不用管它所面的内容是什么
while(*s2) // 让s2向后移,直到遇到'\0',这个位置是在'y'后面而不是's'后面
{ // 此时,s2指到"here iskey"后,而s始终指向的都是首地址'h'
s2++;
}
printf("%d\n",s2-s); // 通过上面的分析,s2-s显然等于10
printf("s=%s\n",s); // 以 %s 这种格式输出,只有当s遇到'\0'才结束输出,
} // 显然,s从'h'位置开始输出,直到遇到'y'后面的'\0'才结束输出
知道了,理解关键就是这一步!谢谢了!以前我以为是把*S的内容加在*S2的后面。