#include <stdio.h>
#include <string.h>
#include <malloc.h>

#define N 10

int main()
{
    char **p;
	char *tmp;
	int i=0,j=0;
	p= (char**)malloc(N*sizeof(char*));  //给指针数组开辟内存空间
	for(i=0;i<N;i++) *(p+i)=(char*)malloc(256);  //给字符串开辟内存空间
	i=0;
	while(i<N)
	{
		scanf("%s",*(p+i));
		i++;
	}
	for(i=0;i<N;i++)
	{
		for(j=i+1;j<N;j++)
		{
			if(strcmp(*(p+i),*(p+j))>0)   //由小到大排序
			{
				tmp=*(p+i);
				*(p+i)=*(p+j);
				*(p+j)=tmp;
			}
		}
	}
	printf("======== 神奇的分界线========\n");
	for(i=0;i<N;i++) 
	{
		printf("%s\n",*(p+i));
	}
    return 0;
}


//////////////////////////////////////////////////////////
以下是使用指针数组完成相同的功能

#include <stdio.h>
#include <string.h>
#include <malloc.h>

#define N 10

int main()
{
    char *p[N];
	char *tmp;
	int i=0,j=0;
	for(i=0;i<N;i++) 
	{
		p[i]=(char*)malloc(256);     //给字符串开辟内存空间
		memset(p[i],0,sizeof(p[i]));  //初始化为 0
	}
	i=0;
	while(i<N)
	{
		scanf("%s",p[i]);
		i++;
	}
	for(i=0;i<N;i++)
	{
		for(j=i+1;j<N;j++)
		{
			if(strcmp(p[i],p[j])>0)   //由小到大排序
			{
				tmp=p[i];
				p[i]=p[j];
				p[j]=tmp;
			}
		}
	}
	printf("======== 神奇的分界线========\n");
	for(i=0;i<N;i++) 
	{
		printf("%s\n",p[i]);
	}
    return 0;
}