能帮我看看下面这个小程序哪里出错了,程序可以编译通过但是运行是就是出现错误,下面是运行时的结果。谢

#include<stdio.h>voidmain(){char*p="iamthebest";chara[20];inti=0;for(;*p++!='\0';i++)... #include<stdio.h>
void main()
{
char *p="i am the best";
char a[20];
int i=0;
for(;*p++!='\0';i++)
a[i]=*p++;
a[i]='\0';
for(i=0;i<20;i++)
printf("%c",a[i]);
}
展开
 我来答
破少爷的剑
2011-02-13 · TA获得超过273个赞
知道答主
回答量:117
采纳率:0%
帮助的人:107万
展开全部
原因有二:
1.a[20[没有进行初始化。如果一个自动存储类型的数组没有初始化,也没有对其元素赋值,每个元素的值都是无法预先确定的。也就是你后面的“烫烫烫”出现的原因
2.你对p进行了两次自加运算。第一次是在控制语句for中。第二次是在循环中,因此实际上每进行一次循环,p的位置前进2位

我对你的代码进行了下改动,编译,运行都ok,最后的显示结果是"I 'm the best"

#include<stdio.h>

void main()
{
char *p="i am the best";
char a[20]={'\0'}; /*对数组要养成初始化的习惯*/
int i=0;
for(;*p!='\0';i++)
a[i]=*p++; /*去掉多一次的p++*/
a[i]='\0';
for(i=0;i<20;i++)
printf("%c",a[i]);
}

学习顺利
力控科技
2025-03-07 广告
卸载运行包需要两个步骤:1、手动删除运行包安装后生成文件夹及文件夹中的内容;2、删除注册表(1.Windows2000: 进入windows安装系统盘―&gt;WINNT文件夹―&gt;打开regedit.exe文件―&gt;使用查找功能搜... 点击进入详情页
本回答由力控科技提供
sun_siliang
2011-02-13 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:5558万
展开全部
#include<stdio.h>
#include<string.h>
void main()
{
char *p="i am the best";
char a[20];
int i=0;
for(;*p!='\0';i++)//改过改过改过改过改过
a[i]=*p++;
a[i]='\0';

for(i=0;i<strlen(a);i++)//改过改过改过改过改过
printf("%c",a[i]);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
陈宗权8d804
2011-02-13 · TA获得超过3766个赞
知道小有建树答主
回答量:1159
采纳率:0%
帮助的人:1064万
展开全部

for(i=0;i<20;i++)
printf("%c",a[i]);
改成
printf("%s\n",a);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bad12358
2011-02-13 · TA获得超过343个赞
知道小有建树答主
回答量:222
采纳率:0%
帮助的人:299万
展开全部
#include<stdio.h>
void main()
{
char *p="i am the best";
char a[20];
int i=0;
for(;*p!='\0';i++) //*p++!='\0'的话这里加1,下面又加1,多了一次
a[i]=*p++;
a[i]='\0';
for(i=0;i<20&&a[i]!='\0';i++)
printf("%c",a[i]);
//你循环了20次,但i am the best没有20个字符长,而你在
//*p!='\0'时终止了复制,所以出现乱码
//用printf("%s",a);并把循环去掉
//或者像上面那样加个判断条件
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式