2016-06-20 2 views
-1

Я создаю код в 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]); 
} 
+1

Для начала избавиться от ' ';'' 'следующие ваши, если ... "..") == 0);' (вы должны получать предупреждения компилятора/ошибок в отношении непревзойденный 'else') –

+2

Вот вам совет: ваш вопрос - хороший вопрос, но название не содержит фактического вопроса, который у вас есть, но еще один, на который вы уже ответили, и который выглядит очень старым для большинства людей. Вы получите больше помощи с лучшим заголовком. –

ответ

1
   p[*tam]=malloc(strlen(nombre)+1); 
       p[*tam]=nombre; 

Вы выделяете кусок памяти, то сразу теряет указатель на эту память и утечку его. Вы, наверное, хотели:

   p[*tam]=malloc(strlen(nombre)+1); 
       strcpy(p[*tam], nombre); 
+0

Спасибо, я не вижу этого, теперь он работает. –

 Смежные вопросы

  • Нет связанных вопросов^_^