Совершенно новый для C и найти его запутанным. Что я действительно хочу знать, так это взять два отдельных фрагмента кода и заставить их работать вместе.
Вот некоторый код, который просто перечисляет содержимое текущего каталога:
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int
main (void)
{
DIR *dp;
struct dirent *ep;
dp = opendir ("./");
if (dp != NULL)
{
while (ep = readdir (dp))
puts (ep->d_name);
(void) closedir (dp);
}
else
perror ("Couldn't open the directory");
return 0;
}
Вывод не отсортирован
Вот некоторый код, который сортирует массив по длине элементов, используя алгоритм быстрой сортировки:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *array[] = { "XX", "YYY", "Z" };
#define N (sizeof(array) / sizeof(array[0]))
int
cmp(const void *a, const void *b)
{
size_t lena = strlen(*(const char **)a);
size_t lenb = strlen(*(const char **)b);
return lena < lenb ? -1 : lena > lenb;
}
int
main()
{
size_t i;
qsort(array, N, sizeof(array[0]), cmp);
for (i = 0; i < N; i++)
printf("%s\n", array[i]);
}
Я уверен, что есть более эффективные способы сделать это, но по чисто академическим причинам я хотел бы использовать выходные данные первой функции (содержимое каталога) в качестве входных данных для последней функции (сортировка по длине).