有谁能逐句解释一下这个程序吗

10.以下程序中函数fun(char s1[],char s2[])的功能是:将字符串s2插入到字符串s1的前面。

#include <stdio.h>
#include <conio.h>
void fun(char s1[],char s2[])
{
int lenofs1, lenofs2, k;
lenofs1=lenofs2=0;
while(s2[lenofs2]!='\0')
lenofs2++;
while(s1[lenofs1]!='\0')
lenofs1++;
for(k=lenofs1-1; k>=0; k--)
s1[k+lenofs2]=s1[k];
for(k=0; k<lenofs2; k++)
s1[k]=s2[k];
}
int main()
{ char str1[100]="xyz",str2[20]="abcd";
fun(str1,str2);
printf("str1 after inserted :%s\n",str1);
return 0;
}


void fun(char s1[], char s2[])
{
    int lenofs1, lenofs2, k;
    lenofs1 = lenofs2 = 0;

    while(s2[lenofs2] != '\0') //s2的长度
        lenofs2++;

    while(s1[lenofs1] != '\0') //s1的长度
        lenofs1++;

    for(k = lenofs1 - 1; k >= 0; k--)  //把s1向后移动lenofs2个字符
        s1[k + lenofs2] = s1[k];

    for(k = 0; k < lenofs2; k++) // s2插入到s1的开头处。
        s1[k] = s2[k];
}

mark