为什么代码运行结果会出现黑方框

#include<stdio.h>
#include<string.h>
int main()
{
void yuan(char a[],char b[]);
char a[50],b[50];
scanf("%s",a);
yuan(a,b);
return 0;
}
void yuan(char a[],char b[])
{
int i;
for(i=0;i<=50;i++)
{
if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u'||a[i]=='A'||a[i]=='E'||a[i]=='I'||a[i]=='O'||a[i]=='U')
b[i]=a[i];
}
printf("%s\n",strcat(a,b));
}

修改如下,供参考,修改见注释:

#include<stdio.h>
#include<string.h>
int main()
{
    void yuan(char a[], char b[]);
    char a[50], b[50] = {0};//修改
    scanf("%s", a);
    yuan(a, b);
    return 0;
}
void yuan(char a[], char b[])
{
    int i, k;//修改
    for (i = 0, k = 0; a[i] != '\0'; i++)//for (i = 0; i <= 50; i++)修改
    {
        if (a[i] == 'a' || a[i] == 'e' || a[i] == 'i' || 
            a[i] == 'o' || a[i] == 'u' || a[i] == 'A' || 
            a[i] == 'E' || a[i] == 'I' || a[i] == 'O' || a[i] == 'U')
            b[k++] = a[i];//修改
    }
    b[k] = '\0';//修改
    printf("%s\n", strcat(a, b));
}

我gcc编译器运行没有问题