两个字符串中的最大值和最小值插入

字符插入
#include <stdio.h>
#include <string.h>
int main(void)
{

int a,i,b,c,d;
c=0;
d=0;
char str [20];
char arr[20];
fgets(str,50,stdin);
fgets(arr,50,stdin);
a=strlen(str);
b=strlen(arr);
for(i=0;i<a;i++)
{
if(str[i]>str[c])
c = i;

}
for(i=0;i<b;i++)
{
if(arr[i]<arr[d])
{
d=i;
}
}
for(i=0;i<c;i++)
{printf("%c",str[i]);

}
printf("%c",arr[d]);

for(i=c+1;i<a;i++)
{
printf("%c",str[i]);

}

return 0;

}
为啥c=a?
输出的东西总是第一个字符串输出后在插入

题目是啥啊?
char str [20];
char arr[20];
fgets(str,50,stdin);
fgets(arr,50,stdin);
明明定义的长度只有20,为啥fgets允许50?