为什么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"); }
展开
 我来答
百度网友83cdc1c
2013-05-26 · TA获得超过5792个赞
知道大有可为答主
回答量:1907
采纳率:100%
帮助的人:893万
展开全部
#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 · 知道合伙人互联网行家
普洛智应
知道合伙人互联网行家
采纳数:410 获赞数:1586
虚拟现实(VR/AR)以及游戏相关技术,物联网以及传感器技术

向TA提问 私信TA
展开全部
先把你的字符数组初始化为空。。。
后面打印出来的字符是未初始化的数组单元的内容
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ST杰龙
2013-05-26 · TA获得超过175个赞
知道小有建树答主
回答量:202
采纳率:100%
帮助的人:82万
展开全部
字符串 需要有个结束字符串的 '\0'符号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
caichengpan
2013-05-26 · TA获得超过182个赞
知道小有建树答主
回答量:241
采纳率:0%
帮助的人:182万
展开全部
字符串忘记放结束符了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式