Мне нужно рекурсивно перечислить все подкаталоги данного каталога
Обратите внимание, что каталоги неизвестны стандарту C11 или предыдущим (некоторые * 1007 В операционных системах * MS-DOS в прошлом веке не было никаких каталогов, но был компилятор C; и VMS имела иное понятие каталога, чем ОС, работающая на вашем компьютере; AFAIK Arduino программируется в C, но обычно не имеет файловой системы вообще). Проверьте, прочитав n1570 . API, относящийся к каталогам: операционная система указывает c. В Windows это будет WinAPI .
В системах Linux вы должны использовать nftw (3) ; он сделает большую часть работы за вас; он является частью GNU glib c или musl lib c, исходный код которых находится в свободном доступе. Или рассмотрите такие библиотеки, как Glib (или POCO или Qt , если вы можете использовать C ++), и изучите их исходный код.
Вы бы прошли на nftw
некоторую функцию, которая заполняет (и / или reallo c) некоторый глобальный или static
указатель на struct
, тщательно определенный вами , возможно, заканчивающийся некоторыми гибкий элемент массива и использовать C динамический c выделение памяти .
Обратите внимание, что GNU findutils - это бесплатное программное обеспечение . Вы можете изучить его исходный код для вдохновения.
Обратите внимание, что sa sh или busybox имеет встроенную команду find
и является с открытым исходным кодом . Вы можете изучить его исходный код для вдохновения.
И zsh
оболочка (также fish
оболочка ) имеет мощные средства расширения оболочки, в том числе рекурсивные подстановка как ls **/*.c
, чтобы вы могли изучить его исходный код для вдохновения.
Вы неправильно кодируете :
path = malloc(sizeof(name) + sizeof(subName) + 2);
strcat(path, name);
, но это неверно ( неопределенное поведение ), поскольку mallo c может дать сбой, и вы должны проверить это, а вы этого не сделали (помните, что strcat ожидает действительный пункт назначения).
Пожалуйста, прочтите быстро Как отлаживать небольшие программы . На Linux скомпилируйте свой код с gcc -Wall -Wextra -g
и научитесь использовать отладчик gdb
.