Я создаю код в C, чтобы найти все имена файлов в каталоге, этот код является рекурсивным, поэтому, если он найдет другие каталоги, в этом будет рассмотрен список других каталогов. Поиск в каталоге и поиск файлов хорошо работают, потому что я печатал на экране, что программа читала, и я понял, что нахожу все имена файлов и не повторяю ни одного имени файла. Проблема заключается в том, что я сохраняю в массиве строк символов имя найденного файла, и когда вы найдете все файлы, у меня будет в основном расположение строк со всеми именами файлов, но когда я напечатаю на экране, что В нем не все файлы, а несколько имен файлов. Конечная цель этой программы - не печатать все имена файлов на экране, цель состоит в том, чтобы сохранить в расположении все имена файлов. Я не вижу ошибки, если кто-то может сказать мне что-то, что я делаю неправильно, я буду быть благодарным.В C Как я могу найти в каталоге все имена файлов и хранить их в массиве строк символов?
void findfiles(char *root,char *p[],int *tam){
DIR * dir;
struct dirent *entrada;
struct stat stt;
dir = opendir(root);
char *aux;
char nombre[BUFFER_TAM];
char buf[30];
if (dir == NULL) {
printf("hola4\n");
return;
}
while ((entrada = readdir(dir)) != NULL) {
if (strcmp(entrada->d_name,".")==0 || strcmp(entrada->d_name,"..")==0);
else {
if (entrada->d_type == DT_DIR){
strcpy(nombre,root);
strcat(nombre,"/");
strcat(nombre,entrada->d_name);
findfiles(nombre,p,tam);
}
else {
strcpy(nombre,root);
strcat(nombre,"/");
strcat(nombre,entrada->d_name);
p[*tam]=malloc(strlen(nombre)+1);
p[*tam]=nombre;
*tam = *tam +1;
}
}
}
}
void main(){
char *archivos[BUFFER_TAM];
char root[BUFFER_TAM]="/home/jesusmolina/Documentos";
int i=0,tam=0;
findfiles(root,archivos,&tam);
for (i;i<tam;i++)
printf("%s\n",archivos[i]);
}
Для начала избавиться от ' ';'' 'следующие ваши, если ... "..") == 0);' (вы должны получать предупреждения компилятора/ошибок в отношении непревзойденный 'else') –
Вот вам совет: ваш вопрос - хороший вопрос, но название не содержит фактического вопроса, который у вас есть, но еще один, на который вы уже ответили, и который выглядит очень старым для большинства людей. Вы получите больше помощи с лучшим заголовком. –