c语言代码运行错误,是数组越界了还是什么?(dot.cpp1009数字的处理与判断 )

题目

给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123
样例输入

12345

样例输出

5
1 2 3 4 5
54321

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<string.h>
int main()
{
   char a[5];
    gets(a);
    int len=strlen(a);
    printf("%d\n",len);
    for(int i=0;i<len;i++)
    {
        printf("%c ",a[i]);
    }
    printf("\n");
    for(int i=len-1;i>=0;i--)
    {

        printf("%c",a[i]);
    }
}


运行结果及报错内容

img

把gets(a);换成scanf("%s",a);能通过oj,为什么?

字符串可以这样输入

gets() 是会读入空格的, scanf()是不读入空格的。

gets 不满足题意:给出一个不多于5位的整数
你可以输入任意多个整数

scanf超出数组长度就会截断