
为什么c语言运行结果会这样?
附程序:#include"stdio.h"voidmain(){inti,n;charstr[32],str1[12],str2[12];charc;scanf("%s%...
附程序:
#include "stdio.h" void main() { int i,n; char str[32],str1[12],str2[12]; char c; scanf("%s%s",str1,str2); c=str1[0]; for(i=0;i<=12;i++) { if(str1[i]>c) { c=str1[i]; n=i; } } for(i=0;i<=n;i++) str[i]=str1[i]; for(i=0;i<=11;i++) str[n+1+i]=str2[i]; for(i=0;i<=24;i++) printf("%c",str[i]); printf("\n"); } 展开
#include "stdio.h" void main() { int i,n; char str[32],str1[12],str2[12]; char c; scanf("%s%s",str1,str2); c=str1[0]; for(i=0;i<=12;i++) { if(str1[i]>c) { c=str1[i]; n=i; } } for(i=0;i<=n;i++) str[i]=str1[i]; for(i=0;i<=11;i++) str[n+1+i]=str2[i]; for(i=0;i<=24;i++) printf("%c",str[i]); printf("\n"); } 展开
4个回答
展开全部
#include "stdio.h"
void main()
{
int i,n;
char str[32],str1[12],str2[12];
char c;
scanf("%s%s",str1,str2);
n=0;
for(i=0;i<12;i++)
{
if(str1[i]=='\0')
break;
if(str1[i]>str1[n])
{
n=i;
}
}
for(i=0;i<=n;i++)
str[i]=str1[i];
for(i=0;i<=11;i++)
str[n+1+i]=str2[i];
for(i=0;str[i]!='\0';i++)
printf("%c",str[i]);
printf("\n");
}
主要是寻找最大字符的时候,没有判断字符串结束。
另外,变量c没必要
最后输出str的时候,也没有考虑字符串结束。
追问
我还是不理解产生乱码与判断字符串结束有什么关系?
追答
字符串结束符后面的字符是随机的,可能比前面有效的字符的ascii码值更大,那样的话,n记录的下标就可能指到字符串结束符的后面去。
输出的时候,如果不考虑结束字符,那就把有效字符后面的随机字符也输出了,就有乱码。
2013-05-26 · 知道合伙人互联网行家
关注

展开全部
先把你的字符数组初始化为空。。。
后面打印出来的字符是未初始化的数组单元的内容
后面打印出来的字符是未初始化的数组单元的内容
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
字符串 需要有个结束字符串的 '\0'符号
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
字符串忘记放结束符了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询