连接字符串并输出,结果出现有乱码

为啥会有乱码呀

#include <stdio.h>
#include <string.h>
int strcen(char a[],char b[]);
int main(){
    int k;
    char a[41],b[21];
    gets(a);
    gets(b);
    k=strcen(a,b);
    puts(a);
    printf("%d",k);
    return 0;
}

  int strcen(char a[],char b[])
{  int i=0,j=0;
    while (a[i]!='\0') 
          i++;
    for(j=0;b[j]!=0;j++)
      {a[i]=b[j];
       i++; }
    
    return(i);
}

#include <stdio.h>
#include <string.h>
int strcen(char a[],char b[]);
int main(){
    int k;
    char a[41],b[21];
    gets(a);
    gets(b);
    k=strcen(a,b);
    puts(a);
    printf("%d",k);
    return 0;
}
 
int strcen(char a[],char b[])
{ 
    int i=0,j=0;
    while (a[i]!='\0') 
          i++;
    for(j=0;b[j]!='\0';j++)
    {
         a[i]=b[j];
         i++;
    }
    a[i]='\0';
    return(i);
}```


```

22行加上 a[i] = 0;最后要加上字符串结束符才行

字符串结尾要赋值成0呀,要不然字符串不结束,后边的乱码也当字符串输出,可不乱码 吗
或者你改成for(j=0;b[j-1]!=0;j++),连结尾的0一起复制过来