希望有人帮我看看这问题到底出在哪

问题遇到的现象和发生背景 写学校oj上的题目时为何报错?

问题题目在如下图片中:

img


题目样例如下:
c5430-456cm9203,’36.g64x4/546[45v];;v5642/;;432

问题相关代码,请勿粘贴截图

第一个(oj报错的代码)

#include<stdio.h>
#include<string.h>
int main(){
    char str[200];
    while(scanf("%s",str)!=EOF)
    {
        char a[200],b[200],c[200];
        int d=0,e=0,f=0;
        int len=strlen(str);
        for(int i=0;i<len;i++)
        {
            if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z')
            {
                a[d]=str[i];
                d++;
            }
            else if(str[i]>='0'&&str[i]<='9')
            {
                b[e]=str[i];
                e++;
            }
            else
            {
                c[f]=str[i];
                f++;
            }
        }
        printf("%s\n%s\n%s\n",a,b,c);
    }
    return 0;
}

img

第二次(oj通过)

#include<stdio.h>
#include<string.h>
int main(){
    char str[200];
    while(~scanf("%s",str))
    {
        char a[200]={},b[200]={},c[200]={};
        int d=0,e=0,f=0;
        int len=strlen(str);
        for(int i=0;i<len;i++)
        {
            if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z')
            {
                a[d]=str[i];
                d++;
            }
            else if(str[i]>='0'&&str[i]<='9')
            {
                b[e]=str[i];
                e++;
            }
            else
            {
                c[f]=str[i];
                f++;
            }
        }
        printf("%s\n%s\n%s\n",a,b,c);
    }
    return 0;
}

img

运行结果及报错内容

运行结果相同,但是上传到oj上第一个报错,第二个通过。

img

我的解答思路和尝试过的方法

两个唯一的区别就是定义三个数组时,如下:

char a[200],b[200],c[200];
char a[200]={},b[200]={},c[200]={};

我想要达到的结果

我想找出问题所在,可是本人C入门,实在看不出来。