C语言,动态分配二维字符串数组

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define   N 2 /*根据字符串的长度排序,由长到短*/

void sort(char *p[N]);

void main() {

#if 0     char str[N][50];/*保存字符串的二维数组,每个字符串的最大长度是50*/    

   int i;     char *p[N];/*声明指针数组,保存二维数组每一行的地址*/    

   printf("请输入%d个字符串:\n",N) ; #else  int i;  char *p[N];/*声明指针数组,保存二维数组每一行的地址*/  

   char **str=(char**)malloc(sizeof(char*)*N);  

   for( i=0;i<N;i++)   str[i] = (char*)malloc(sizeof(char)*50);  

   printf("请输入%d个字符串:\n",N) ;

#endif    

   for(i=0;i<N;i++)   scanf("%s",str[i]);     //   gets(str[i]);/*初始化二维数组*/

    for(i=0;i<N;i++)     {              

     /*初始化指针数组*/         p[i]=str[i];     }    

  sort(p);        system("pause"); }

 

void sort(char *p[N]) {    

  int i,j;    

  char *t;    

  

  printf("由长到短排序:\n");    

  for(i=0;i<N-1;i++)       

    for(j=i+1;j<N;j++)        {            

       if(strlen(p[i])<strlen(p[j]))             {                

        t=p[i];                

        p[i]=p[j];                

        p[j]=t;             }       

    }       

    for(i=0;i<N;i++)        

      puts(p[i]);/*输出排序后的结果*/

}

posted on 2012-08-25 23:18  不知道  阅读(13983)  评论(0编辑  收藏  举报

导航