c语言,字符串从小到大排列,报错无法运行

#include<stdio.h>
#include<string.h>
int main(void)
{
char *str1[100],*str2[100],*str3[100];
int *p;
gets(str1);
gets(str2);
gets(ste3);
if(strcmp(str1,str2)>0)
{
p=str1;
str1=str2;
str2=p;
}
if(strcmp(str1,str3)>0)
{
p=str1;
str1=str3;
str3=p;
}
if(strcmp(str2,str3)>0)
{
p=str2;
str2=str3;
str3=p;
}
puts(str1);
puts(str2);
puts(str3);

return 0;

}

输入
cde
afg
abc
应输出
abc
afg
cde


#include<stdio.h>
#include<string.h>
int main(void)
{
    char str1[100],str2[100],str3[100];
    int *p1,*p2,*p3,*temp;
    gets(str1);
    gets(str2);
    gets(str3);
    p1=str1;
    p2=str2;
    p3=str3;
    if(strcmp(str1,str2)>0)
    {
        temp = p1;
        p1=p2;
        p2=temp;
    }
    if(strcmp(str1,str3)>0)
    {
        temp = p1;
        p1=p3;
        p3=temp;
    }
    if(strcmp(str2,str3)>0)
    {
        temp = p2;
        p2=p3;
        p3=temp;
    }
    puts(p1);
    puts(p2);
    puts(p3);
    
    return 0;
}