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]);/*输出排序后的结果*/
}