/*
2. 字符串处理
从标准输入中读入N(1<N<10000)行以换行符结束且长度不超过2048的
字符串,并在输入结束后输出其中最长10行的输入序号、长度和内容。
当有多行长度相等的最长行时,输出最先输入的行的信息。
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp(const void *p,const void *q)
{
return strcmp((char*)p,(char*)q);
}
void String_manipulation(int N_link)
{
int i,n;
char **p = new char* [N_link];/* 如果不定义动态二维数组 、 输入就没有错误 */
for( n = 0;n < N_link; n++)
{
p[n]= new char [2048];
}
printf("Input string: \n");
for(n=0;n<N_link;n++)
{
scanf("%s",p[n]);/*输入时出现错误*/
}
/*
字符串数组的排序
*/
qsort((void*)p,N_link,sizeof(p[0]),cmp);
for(i=0,n=N_link;i<2;i++)
{
printf("%s",p[n]);
}
}
int main()
{
int N;
scanf("%d",&N);
String_manipulation(N);
return 0;
}
/*
如果不定义动态二维数组 输入就没有错误
字符串数组的排序
*/
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
char a[20005][25];/* 如果不定义动态二维数组 输入就没有错误 */
int cmp(const void *p,const void *q)
{
return strcmp((char*)p,(char*)q);
}
int main()
{
int n,i;
while(1)
{
scanf("%d",&n);
if(n==0) break;
for(i=0;i<n;i++)
{
scanf("%s",a[i]);
}
qsort((void*)a,n,sizeof(a[0]),cmp);
for(i=0;i<n;i++)
{
printf("%s\n",a[i]);
}
}
return 0;
}
这是怎么 回事 为什么定义成动态数组之后就会出现错误?