为什么输出值前面有一个%

问题遇到的现象和发生背景

如果输入字符串用gets(a)就没有这个问题,但是预设值就会有

问题相关代码,请勿粘贴截图
运行结果及报错内容

%edcba

我的解答思路和尝试过的方法
我想要达到的结果
#include <stdio.h>
#include <stdlib.h>

void fanzhuan(char *p)
{
    if(p[0]=='\0')
        return;
    else
    {
        fanzhuan(p+1);
        printf("%c",p[0]);
    }
}
int main()
{
    char a[5]={'a','b','c','d','e'};
    fanzhuan(a);
    return 0;
}


因为char a[5]={'a','b','c','d','e'};数组的定义是满负荷的,并没有留一个空间放最后的‘\0’,所以输出出来最有一次返回指向的是一个未知空间,所以输出一个不可预见的字符,如果要正确输出只需如下:
char a[6]={'a','b','c','d','e','\0'};即可

因为a是一个字符数组, 你并没有赋值'\0'到任意一个位置。
所以程序执行的时候会一直往下找,直到找到'\0'为止。
你的结果只是刚好后面的那个内存位置是'%',再后面的就是'\0'了而已。
其实就是因为你没有手动设置一个结束位'\0',所以程序的结束不受你控制了而已