#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX 101 int cmp(const void* a, const void* b) { return strcmp(*((char**)a), *((char**)b)); } int main() { //创建一个动态数组 char* SubString[MAX] = {NULL}; SubString[0] = (char*)malloc(sizeof(char) * MAX); scanf("%s", SubString[0]); //这是串长,也是子串总个数 int Length = strlen(SubString[0]); //接下来将所有的子串都存下来 for (int i = 1; i < Length; i++) { //动态分配了内存 SubString[i] = (char*)malloc(sizeof(char) * MAX); strcpy(SubString[i], SubString[0] + i);//从 SubString[0] 字符串的第 i 个字符开始,复制剩余的字符串到 SubString[i] 指向的新分配的内存中 } //将SubString中所有的字符串都进行排序 qsort(SubString, Length, sizeof(char*), cmp); //将所有子串输出 for (int i = 0; i < Length; i++) printf("%s\n", SubString[i]); //一定要注意,将所有的动态分配的部分都释放 for (int i = 0; i < Length; i++) { free(SubString[i]); } return 0; }