不用string.h输入任意五个字符串并比较大小然后输出。小弟我要崩溃了!子函数检查过没有异常啊快气死了啊

不用string.h输入任意五个字符串并比较大小然后输出。我要崩溃了!!子函数检查过没有错误啊!!求助啊,快气死了啊!
#include<stdio.h>
#define pf printf
int strcmm(const char *str1,const char *str2)
{
 for(;*str1==*str2;str1++,str2++)//
 {
  if(*str1=='\0')return 0;
 }
 if( *(unsigned char *)str1 >  *(unsigned char *)str2  )
 return 1;
 else if(  *(unsigned char *)str1  <   *(unsigned char *)str2   )
 return -1;
}
void strcpp(char *s1,char *s2)

int i,j; 
for(i=0;s1[i]!='\0';i++); 
for(j=0;s2[j]!='\0';j++)
s1[i++]=s2[j]; s1[i]='\0';
}
int main(void)
{
char a[5][20],t[20]="";
//char b[][10]={"gfreg","cdwegf"};

    int i,j;
//strcpp(t,b[1]);//子函数无错
//puts(t);
// j=strcmm(t,b[0]);
// printf("%d",j);
for(i=0;i<5;i++)
gets(a[i]);//没错for(i=0;i<5;i++)
 
                  //for(j=0;j<1;j++)
     //puts(a[3]);            //scanf("%s",a[i][j]);huo zhe gets(a);
  for(i=0;i<4;i++)
  for(j=0;j<4-i;j++)
  
   if( strcmm(a[j],a[j+1]) < 0  )
   {
    
        strcpp(t,a[j]);
        strcpp(a[j],a[j+1]);
        strcpp(a[j+1],t); 
  }

for(i=0;i<5;i++)
puts(a[i]);
}
C语言

------解决方案--------------------
void strcpp(char *s1,char *s2)

int i,j; 
for(i=0;s1[i]!='\0';i++); 这个分号干嘛?
for(j=0;s2[j]!='\0';j++)
s1[i++]=s2[j]; s1[i]='\0'; 这两个语句属于哪个循环?
}

------解决方案--------------------
注释有点乱,去掉吧再重整理一下,看的很麻烦
------解决方案--------------------
代码好乱,楼主贴源码上来
------解决方案--------------------
把void copy(char from[],char to[])
改为void copy(char to[],char from[])

你仔细看下你写的复制函数,在调用的时候顺序搞错了。
------解决方案--------------------
 copy(t,a[j]), 你实际是想把a[j]复制到t, 但你写的复制函数功能是把t复制到a[j],所以就如出现你所说的“如果t不赋初值就会出问题”。把复制函数改下就可以了。
------解决方案--------------------
楼上正解。。