重写函数readlines,将输入的文本行存储到由main函数提供的一个数组中,而不是存储到调用alloc分配的存储空间中。
#define MAXLINE 500
#define MAXSIZE 1000
int getline(char*,int); //获取一行输入,返回该行的长度
int readline(char *lineptr[], char *len[],int maxlines){
int nlines = 0;
int lenth;
char *p,lin[MAXSIZE];
char *lentop = len + MAXSIZE; //表示存储上限
p = len; //p初始化为存储数组的起始位置
while((lenth = getline(lin,MAXSIZE))>0 || p + lenth > lentop){//利用同数组内指针比较来保证不溢出
if(nlines>MAXLINE){
return -1;
}else{
lin[lenth - 1] = '\0'; //去除换行符
strcpy(p, lin);
lineptr[nlines++] = p;
p += lenth; //p指针指向新的空闲区域
}
}
return nlines;
}