指针数组 数组指针

作者在 2012-10-29 16:17:20 发布以下内容
/*
*指针数组,数组指针
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *getline(void);  //读取文字
int str_compare(const void *, const void *);

#define NLINES_MAX 1000  //文字行的最大数目
char *linePtr[NLINES_MAX];  //字符指针的数组

int main(){
    //读取行
    int n = 0;
    
    for(; n<NLINES_MAX && (linePtr[n]=getline())!=NULL; ++n)
        ;
    if(!feof(stdin)){  //处理错误
        if(n==NLINES_MAX){
            fputs("sorttext: too many lines.n", stderr);
        }else{
            fputs("sorttext: error reading from stdin.n", stderr);
        }
    }else{  //排序和输出
        qsort(linePtr, n, sizeof(char*), str_compare);  //排序
        for(char **p=linePtr; p<linePtr+n; ++p){  //输出
            puts(*p);
        }
    }
    return 0;
}

/*
*从stdin读取一行的文字,丢弃结尾的换行符
*返回值:指向所读取字符串的指针、或者文件尾部或者失败时的NULL
*/
#define LEN_MAX 512
char *getline(){
    char buffer[LEN_MAX], *linePtr = NULL;

    if(fgets(buffer, LEN_MAX, stdin)!=NULL){
        size_t len = strlen(buffer);

        if(buffer[len-1]=='n'){  //丢弃换行符
            buffer[len-1] = '';
        }else{
            ++len;
        }
        if((linePtr=(char*)malloc(len))!=NULL){  //为此行分配足够的内存
            strcpy(linePtr, buffer);  //复制此行
        }        
    }
    return linePtr;
}

/*
*比较函数,供qsort()使用
*自变量:“指向数组内要被排序的两个元素”的指针
*/
int str_compare(const void *p1, const void *p2){
    return strcmp(*(char**)p1, *(char**)p2);
}
 
基础编程 | 阅读 1140 次
文章评论,共0条
游客请输入验证码
浏览18305次
文章归档