2016-06-20 1 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; 
       } 
      } 
     } 

}

+1

まず、 '' if ... ".. == 0);'の後に ''; ''を取り除いてください。(コンパイラの警告/エラーを受け取るべきですそれ以外のものはほとんどありません) –

+2

あなたのためのヒントです:あなたの質問は良い質問ですが、タイトルには実際の質問は含まれていません。あなたはより良い言葉のタイトルでより多くの助けを得るでしょう。 –

答えて

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]); 
} 
   p[*tam]=malloc(strlen(nombre)+1); 
       p[*tam]=nombre; 

その後すぐにそのメモリへのポインタを失うと、それをリーク、メモリのチャンクを割り当てます。

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

ありがとう、私はそれを参照してください、今は動作します。 –

関連する問題