字符串排序:C语言解法

#include <stdio.h>
//在这里进行变型,比较的数组是个指针数组,需要对指针指向的内容进行比较
int cmp(const char** a, const char** b){
    return strcmp((char *)*a, (char *)*b);
}
int main(){
    int num = 0;
    scanf("%d\n",&num);
    char** str = (char**)malloc(sizeof(char*) * (num));  //指向二维数组,一维数组指针的二级指针 
    char* p = (char*)malloc(sizeof(char) * (num) * 101);   //为二维数组的每个元素分配空间
    memset(p, sizeof(char) * (num) * 101, 0);
    for(int i=0; i<num; i++){
        scanf("%s\n",p+i*101);
        str[i] = p+i*101; //str[i] 是二维数组的一维数组指针  str[i]  = *(str + i)
    }
    //利用strcmp比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。
    //strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,
    //若差值不为0 则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。
    qsort(str, num, sizeof(char *), cmp);
    for(int j=0; j<num; j++){
        printf("%s\n",str[j]);
    }
}