在主函数中输入10个不等长的字符串。用另一个函数对它们按升序排序,然后在主函数中输出这10个已排序的字符串

代码如下:
#include<stdio.h>
#include<string.h>
void sort(char p[])
{
int i,j;
char
temp;
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
if(strcmp(p[i],p[j])>0)
{
temp=p[i];p[i]=p[j];p[j]=temp;
}
}
int main()
{
int i;
char *p[10],str[10][10];
for(i=0;i<10;i++)
printf("Please enter 10 string:\n");
for(i=0;i<10;i++)
scanf("%s",p[i]);
sort(p);
printf("Now, the sequence is:\n");
for(i=0;i<10;i++)
printf("%5s",p[i]);
return 0;
}
在主函数的第二行,str[10][10]是干什么的,没了它,为什么在运行时只能输入5个字符串,还不能排序?在它后面的第一个for(i=0;i<10;i++)为什么同样不能省略?

修改处见注释,供参考:

#include<stdio.h>
#include<string.h>
void sort(char* p[])//修改
{
    int i,j;
    char* temp; //修改
    for(i=0;i<9;i++)
       for(j=i+1;j<10;j++)
           if(strcmp(p[i],p[j])>0)
           {
               temp=p[i];p[i]=p[j];p[j]=temp;
           }
}
int main()
{
    int i;
    char *p[10],str[10][10];
    //for(i=0;i<10;i++)  修改
    printf("Please enter 10 string:\n");
    for(i=0;i<10;i++) {   //修改
        scanf("%s",str[i]); //修改
        p[i] = str[i];    //修改
    }                     //修改
    sort(p);
    printf("Now, the sequence is:\n");
    for(i=0;i<10;i++)
        printf("%5s",p[i]);
    return 0;
}

str这个,从头到尾都没用过,应该是没用的东西
这个程序是读入,排序后就直接输出,所以不需要储存数据,str就是用来储存数据的
第一个for循环控制的就是输入输出的次数.