C语言 用函数把两个字符数组连在一块

问题遇到的现象和发生背景

用函数把两个字符数组连在一块。为什么输出是有方块,而且用指针的函数多出一部分

用代码块功能插入代码,请勿粘贴截图

#include
#include

void strcat1(char s1[],char s2[]);
void strcat2(char *s1,char *s2);

int main()
{
char s1[50],s2[50];
gets(s1);
gets(s2);
strcat1(s1,s2);
strcat2(s1,s2);
return 0;
}

void strcat1(char s1[],char s2[])
{
int i;
int l1,l2;
l1=strlen(s1);
l2=strlen(s2);
for(i=0;i
s1[l1+i]=s2[i];
}
puts(s1);
}

void strcat2(char *s1,char *s2)
{
int i;
int l1,l2;
l1=strlen(s1);
l2=strlen(s2);
for(i=0;i
(s1+l1+i)=(s2+i);
}
*(s1+l1+i)='\0';
puts(s1);
}

运行结果及报错内容

img

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

为什么输出是有方块,而且用指针的函数多出一部分

img