| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 684 人关注过本帖
标题:结果为什么是10?
只看楼主 加入收藏
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 
以下是引用leeco在2007-7-26 23:47:50的发言:
这个程序应该有Runtime Error.
指针s1指向的内存不可写,但是你写了


能详细点吗?还不是很懂

2007-07-27 23:22
wengjinxin
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-7-17
收藏
得分: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'才结束输出

2007-07-28 01:07
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 
以下是引用wengjinxin在2007-7-28 1:07:20的发言:

首先,注意一下编程风格!

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的后面。

2007-07-28 15:26
jianweichief
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-18
收藏
得分:0 

为什么有的编译器能编译通过,而有的不行


2007-07-29 08:56
bysdy
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2007-7-29
收藏
得分:0 
我2个都试了,
TC可以正常的出结果
VC无法正常的出结果
2007-07-29 14:37
快速回复:结果为什么是10?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027128 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved