
能帮我看看下面这个小程序哪里出错了,程序可以编译通过但是运行是就是出现错误,下面是运行时的结果。谢
#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]);
} 展开
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]);
} 展开
4个回答
展开全部
原因有二:
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]);
}
学习顺利
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安装系统盘―>WINNT文件夹―>打开regedit.exe文件―>使用查找功能搜...
点击进入详情页
本回答由力控科技提供
展开全部
#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]);
}
#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]);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把
for(i=0;i<20;i++)
printf("%c",a[i]);
改成
printf("%s\n",a);
for(i=0;i<20;i++)
printf("%c",a[i]);
改成
printf("%s\n",a);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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);并把循环去掉
//或者像上面那样加个判断条件
}
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);并把循环去掉
//或者像上面那样加个判断条件
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询