二级题,高手们帮我看看

luhongfeng 2004-09-12 09:35:05
#include "stdio.h"
int main()
{
char *s1="ABCD",*s2="CDEF";
char *ps1=s1,*ps2=s2;
while (*s1)
s1++;
while (*s1++=*s2++);
printf("%s\n",ps1);
printf("%s\n",ps2);
}
这个程序输出ps2为什么是DEF?
...全文
541 49 打赏 收藏 转发到动态 举报
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
GeminiXXXCC 2005-03-11
  • 打赏
  • 举报
回复
查了下书,原来'\0'的就是0啊.
唉,继续看书.
GeminiXXXCC 2005-03-11
  • 打赏
  • 举报
回复
while (*s1)
s1++;
我只是不明白这个循环为什么能停下来?
哪位解释一下,谢谢.
难道*s1 = '\0'的时候,*s1 = FAULSE了?
tudou614 2005-03-11
  • 打赏
  • 举报
回复
呵呵,可能等级考试刚兴起的时候中国电脑还比较少,专家只好把一些“怪”题COPY下来做为考试内容,不过想清楚还是好的,现在发展这么快等级考试还要跟上时代发展啊!!
lxjlz 2005-03-10
  • 打赏
  • 举报
回复
學習中,都是高手呀.........
Kelvin_Chen 2005-03-07
  • 打赏
  • 举报
回复
惊起骂声一片
yangyangxc 2005-03-04
  • 打赏
  • 举报
回复
给我详细讲一下 那个判断条件可以吗 ?
flower_coge 2005-03-04
  • 打赏
  • 举报
回复
唉,中国人出的题是用人脑来运行底,思维模式差不多啊!
要是用电脑,那就要看用什么编译器了!。。。。。。。
所以只能用来考试,要是用来写程序,估计要被炒!!!!!!!!!!!
yuchengliu 2005-03-04
  • 打赏
  • 举报
回复
我认为这个是题目的问题.
如大家所说:
回复人: xteaj() ( ) 信誉:100
while (*s1) s1++;//将s1移到了字符串的尾端
while(*s1++ = *s2++);//将s2添加到s1的尾端
但在内存区,s1和s2都指向常量,大小已定。
在在初始状态,s1,s2的关系如下
'A' 'B' 'C' 'D' '\0' 'C' 'D' 'E' 'F' '\0'
s1 s2
ps1 ps2
添加后变成
'A' 'B' 'C' 'D' 'C' 'D' 'E' 'F' '\0' '\0'
s1 s2
ps1 ps2
你想ps2不输出DEF是什么?
s1,s2是在编译器初始化的时候,给他们分配的是连续空间,
但是如果这样做会怎么样呢?
请高手指点!谢谢!

#include "stdio.h"
int main()
{
char *s1="ABCD";
char *s3 = "TEST";
char *s2="CDEF";
char *ps1=s1,*ps2=s2;
while (*s1)
s1++;
while (*s1++=*s2++);
printf("%s\n",ps1);
printf("%s\n",ps2);

}
buszker 2005-03-04
  • 打赏
  • 举报
回复
这样的鸟题
不值得大家浪费宝贵的口水
tudou614 2005-03-01
  • 打赏
  • 举报
回复
把最后的'\0'结束副给冲掉了
while (*s1)
s1++;

avalonBBS 2004-09-13
  • 打赏
  • 举报
回复
~晕,,运行时程序DOWN~~
xiaolvlong 2004-09-13
  • 打赏
  • 举报
回复
这题是变态,但是,……这题纯考,你++使得怎么样,我感觉和指针及字符串没什么关系。就是个细心问题。
14301965 2004-09-13
  • 打赏
  • 举报
回复
顶!一楼说的明白。我考2级的时候没遇见这样的题,估计遇见了我也会麻的。
AlxRose 2004-09-13
  • 打赏
  • 举报
回复
学习

楼上能说说什么叫编译器自动对齐地址吗?
zhangfjj 2004-09-13
  • 打赏
  • 举报
回复
我很认真吗?
呵呵。。。
大家不都是在讨论什么输出"DEF"吗?我也是!
171558134 2004-09-13
  • 打赏
  • 举报
回复
zhanghjj 不要那么认真,你要知道很多纸上写出的程序,在机器上不一定都能运行!还是要通过修改的!
现在只是讨论 输出结果为什么是 “DEF” 哈!
这问题只要把思维上的东西讲通,就可以做了! 后面就是一步步调试! 知道运行通过!
171558134 2004-09-13
  • 打赏
  • 举报
回复
顶!!
二楼的! 厉害! 讲解明白! 就连流程图都画出来了! NB !
上!
顶!!!
sangrei 2004-09-13
  • 打赏
  • 举报
回复
#include "stdio.h"
int main()
{
char *s1="ABCD",*s2="CDEF";
char *ps1=s1,*ps2=s2;
while (*s1)
s1++; //此处将地址批针移到S1的末尾,即执行完循环后,S1所指向的地址
//值为"/0"。
while (*s1++=*s2++);//条件不可能成立,因为"/0"!="C",但是执行了*s2++,即s2指向下一
//字符"D"。
printf("%s\n",ps1);
printf("%s\n",ps2);此时当然输出DEF啦!
}

写这样的程序,还不如出去要饭!
  • 打赏
  • 举报
回复
都说了二级是在TC2中运行的啦,大家考虑二级时就应该只考虑TC2这个环境,又不是
在公司里编程。
66766 2004-09-13
  • 打赏
  • 举报
回复
还好我的书里特别强调char *s1="ABCD",*s2="CDEF";s2并不一定紧接着s1,而且并不一定在s1之后
加载更多回复(29)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧