你这个程序有两个地方错了 第一个就是strcmp函数 它里面的两个参数放的应该是字符串的地址 而你写的strcmp(*p1,*p2)是值 所以不对
第二个地方时最后一行代码 只要出现了%s这个输出格式 那么后面接的一定是地址 而你却写得是printf("%s\n%s\n%s",*p1,*p2,*p3); *p1等不是地址而是具体的值 所以这个第二个错的地方 以下是改正后的代码
#include<string.h>
#include<stdio.h>
void main()
{
char *t,*p1,*p2,*p3,s1[20],s2[20],s3[20];
gets(s1);
gets(s2);
gets(s3);
p1=s1;
p2=s2;
p3=s3;
if(strcmp(p1,p2)>0)
{
t=p1;
p1=p2;
p2=t;
}
if(strcmp(p2,p3)>0)
{
t=p2;
p2=p3;
p3=t;
}
if(strcmp(p1,p2)>0)
{
t=p1;
p1=p2;
p2=t;
}
printf("%s\n%s\n%s",p1,p2,p3);
}