在程序设计中,经常遇到多行字符串,如何表示他们呢?直观的办法,是定义一个二维字符数组:
char linechar[MAXLINE][MAXLEN];//MAXLINE个字符串,每个字符串长度最大为MAXLEN
用固定长度的数组表示,直观但不灵活;每行字符串的长度一般不相同,更适合用字符指针来表示:
char * lineptr[MAXLINE]; // 长度为MAXLINE的字符指针,每个指针指向一个字符串(其长度在输入时候确定)
K&R教材以多行文本的输入和输出阐明字符指针数组的用法,具体看程序注释。
#define MAXLINES 5000 //最大行数
#define MAXLEN 1000 //(每行)最大字符数
char *lineptr[MAXLINES];
/* 读入一行字符 */
int readlines(char *lineptr[],int maxlines) {
int len, nlines;
char *p, line[MAXLEN];
nlines=0;
while((len=getline(line,MAXLEN))>0)
/* alloca是向栈申请内存,无需释放 */
if(nlines>=maxlines||(p=alloc(len))==NULL)
return -1; //读入失败,返回-1
else {
/* getline得到的字符串形式为"...\n\0",删除末尾的换行符 */
line[len-1]='\0';
strcpy(p,line);
lineptr[nlines++]=p;
}
return nlines;
}
/* 输出nlines行字符串 */
void writelines(char *lineptr[],int nlines) {
int i;
for(i=0; i<nlines; i++)
printf("%s\n",lineptr[i]);
}