
为什么将下面的for(i=0,j=strlen(ch1)-1;i<j;i++,j--)改 for(i=0,j=2;i<j;i++,j--)才正确
charch1[3];inti,j,t;for(i=0;i<3;i++)scanf("%c",&ch1[i]);for(i=0,j=strlen(ch1)-1;i<j;i...
char ch1[3];
int i,j,t;
for(i=0;i<3;i++)
scanf("%c",&ch1[i]);
for(i=0,j=strlen(ch1)-1;i<j;i++,j--)
{t=ch1[i];ch1[i]=ch1[j];ch1[j]=t;}
for(i=0;i<3;i++)
printf("%c",ch1[i]);
本题求反序存放字符 展开
int i,j,t;
for(i=0;i<3;i++)
scanf("%c",&ch1[i]);
for(i=0,j=strlen(ch1)-1;i<j;i++,j--)
{t=ch1[i];ch1[i]=ch1[j];ch1[j]=t;}
for(i=0;i<3;i++)
printf("%c",ch1[i]);
本题求反序存放字符 展开
4个回答
展开全部
strlen()函数是当碰到第一个'\0'时返回字符串长度.因此,如果ch1最后没有'\0'将出现超过其定义长度3,这样会发生数组越界问题。
当你进行输入时候,录入3个字符,那么最后一个不是'\0',因此strlen()结果将是个不确定数。如果指定j=2,这样在ch1[0],ch1[1],ch1[2]进行交换将不会出现越界问题
当你进行输入时候,录入3个字符,那么最后一个不是'\0',因此strlen()结果将是个不确定数。如果指定j=2,这样在ch1[0],ch1[1],ch1[2]进行交换将不会出现越界问题
更多追问追答
追问
那是在以字符串常量赋值才会加\0,但我现在是一个一个字符输进去的呀
追答
你可以定义char ch1[4];
其他代码不变,在for(i=0;i<3;i++)
scanf("%c",&ch1[i]);
下面写一句 ch1[3]='\0';//让末尾元素为0
这样就可以用strlen来控制
展开全部
因为 strlen(ch1) 为2,不是3 ,把-1去掉就行了。
追问
为什么呀?我都是输入3个字符,将J改为2后才行而改为strlen(ch1)-1就不行
以字符常量赋值不会加\0,只有以字符串常量赋值才会加\0呀
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的程序有问题,定义的变量t是用来作为转换字符的,因此应该定义为字符类型而不是整形
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询