C语言问题 我想用指向指针的方法对5个字符串排序并按长短顺序输出。

在我这段程序不变的情况下,请问怎么修改,让程序正常运行。
#include
char **function(char (*)[20]);
int function1(char (*)[20]);
int main()
{
char a[5][20];
char p[1];
int i;
for(i=0;i<5;i++)
{
gets(
(a+i));
fflush(stdin);
}
printf("\n\n");
for(i=0;i<5;i++)
{
puts(*(a+i));
}
p=function(a);
printf("xx");
for(i=0;i<5;i++)
{
puts(
(p+i));
}
}
char **function(char (*a)[20])
{
int i,j,k,q=0,i1,j2,k2;
char *p[5],cha;
for(i=0;i<4;i++)
{
for(j=i+1,k=i;j<5;j++)
{
if(function1(a+k)<function1(a+j))
k=j;
}

    if(k!=i)
    for(i1=0;i1<20;i1++)
    {
        cha=*(*(a+k)+i1);
        *(*(a+k)+i1)=*(*(a+i)+i1);
        *(*(a+i)+i1)=cha;

    }


      *(p+q++)=*(a+i);   
}

   return p;

}
int function1(char (*a)[20])
{
int k=0;
while(*(*a+k++));

    return k;

}

言问题 我想用指向指针的方法对5个字符串排序并按长短顺序输出。
在我这段程序不变的情况下,请问怎么修改,让程序正常运行。
#include
char **function(char (*)[20]);
int function1(char (*)[20]);
int main()
{
char a[5][20];
char p[1];
int i;
for(i=0;i<5;i++)
{
gets((a+i));
fflush(stdin);
}
printf("\n\n");
for(i=0;i<5;i++)
{
puts(*(a+i));