用指针求学生姓名排序

输入学生人数 n,再输入n个学生姓名,然后将学生姓名升序排序,要求使用指针数组和动态内存分配函数malloc 来存放多个字符串。【输入形式】
第一行输入学生人数n(2≤n≤20)。
接下来n行,每行一个字符串,表示学生的姓名,学生的姓名长度不超过 30,并且学生姓名不包含空格。【输出形式】
n 行,每行一个字符串,表示升序排序后学生的姓名。【样例输入】4
Huangcaiyan Maihaidong Luye Lifugao
【样例输出】 Huangcaiyan Lifugao Luye
Maihaidong解题思路:
(1)义字符指针数组name、字符指针变量temp、学生人数 n、循环变量i和j;
(2)输入学生人数n;然后循环n次,每次循环首先使用 malloc 函数来动态分配 80个字的动态字符数组空间,并让指针变量name[i]指向该空间,然后输入一个学生姓名存放到该空间中

img

img

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

#define MAX_NAME_LENGTH 30

int compare(const void *a, const void *b) {
    return strcmp(*(const char**)a, *(const char**)b);
}

int main() {
    int n;
    scanf("%d", &n);
    char **names = (char**)malloc(n * sizeof(char*));

    for (int i = 0; i < n; i++) {
        names[i] = (char*)malloc(MAX_NAME_LENGTH * sizeof(char));
        scanf("%s", names[i]);
    }

    qsort(names, n, sizeof(char*), compare);

    for (int i = 0; i < n; i++) {
        printf("%s", names[i]);
    }

    return 0;
}