这个代码的运行过程不太明白 能不能解释一下捏

#include<stdio.h>
#include<string.h>'
int main(){
    char a[]="morning",t;
    int i,j=0;
    for(i=0;i<7;i++)
        if(a[j]<a[i])
        j=i;
        t=a[j];
        a[j]=a[7];
        a[7]=a[j];
        puts(a);
        return 0;
}

不理解为什么会输出mo啊 谢谢大家

for(i=0;i<7;i++)
    if(a[j]<a[i])
      j=i;

这三行获取的j表示字符串中最大字母所在下标,结果应该2
t=a[j];
a[j]=a[7];
a[7]=a[j];
这三行交换a[2]和a[7]的值,由于字符串长6,所以第七位是结束符,所以交换以后a[2]就变成了结束符
puts(a);
打印a遇到结束符停止,此时下标为2的位置是结束符,所以打印前两个字母mo

#include <stdio.h>
#include <string.h>

int main()
{
    char a[] = "morning", t;
    int i, j = 0;            // 一开始j=0, a[j]='m'
    for (i = 0; i < 7; i++)  // 这个循环的意思是找到比m大的字母,循环结束时j==2, a[j]='r'
        if (a[j] < a[i])
            j = i;
    t = a[j];    // 下面是把a[j]与a[7]作交换,注意a[7]='\0'
    a[j] = a[7];
    a[7] = a[j];
    puts(a);  // 交换后的字符数组a是"mo\0ningr",输入字符串时遇到第一个'\0'结束,所以输出mo
    return 0;
}

比较的是ASCLL码,a[7],换到了a[2]的位置

img