C语言程序求分析,最好每行都详细说明下,尤其是中间2行for循环读着很乱

{charstr1[]="goodmorning!",str2[20];char*p,*q;for(p=str1;*p!='\0';p++);for(q=str2;--p... { char str1[]="good morning!", str2[20];
char *p, *q;
for(p=str1;*p !='\0';p++);
for(q=str2; --p>=str1;q++); *q=*p;
*q='\0';
printf("%s",str2);
}
麻烦详细解释下结果是怎么得出来的
展开
 我来答
meliumeng
2012-03-11 · 超过41用户采纳过TA的回答
知道答主
回答量:125
采纳率:0%
帮助的人:113万
展开全部
首先我猜你想打印"gninrom doog"。
这个程序出现了不止一处错误,下面逐个指出:
1.双重循环对for语句在表达式括号后面不要加;(分号,能看见吧?),你加了分号意味着for不做任何动作,这是合法但是毫无意义的。
所以你的程序只是执行了*q=*p;*q=‘\0';printf三句,而str2根本未初始化!那么打印出来的东西是未知的或者是空。
2.解决了上述问题之后,编译执行你发现输出窗口黑色的,光标在左上角闪,没有一个输出,而且程序无法自己结束。
呵呵,很明显,你的程序陷入死循环中。
原因很简单,就是你在外层循环的循环体(就是第二个循环里)改变了循环变量P。
你自己模拟一下就ok了。
反正最终的结果是P始终被赋值str1。
这里反映出编程的一个坏习惯,那就是在循环体中改变循环变量的值。这个错误常常是致命的。
正确的代码如下:
#include <stdio.h>
void main()
{
char str1[]="good morning!",str2[20];
char *p,*q,*temp;

for (p=str1;*p!='\0';p++)
{
temp=p;
for(q=str2;--temp>=str1;q++)
*q=*temp;
}
*q='\0';
printf("%s",str2);
}
输出结果:
gninrom doog
因为爱卿5213
2012-03-10 · TA获得超过3836个赞
知道答主
回答量:52
采纳率:0%
帮助的人:29.8万
展开全部
char str1[]="good morning!", str2[20];定义一个字符数组,并赋值;
char *p, *q;定义两个取地址符; for(p=str1;*p !='\0';p++);求解表达式一,在判断表达式二,若为真,则p++,第二个for同理。再把*p复制给*q.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式