2017-10-19 4 views
0

ディレクトリ内のすべてのアイテムをリストし、サブディレクトリ内のすべてのアイテムをリストする必要があります。私はこの機能を持っています:Linux上のC言語のディレクトリを再帰的に表示する

void rls_handler(const char *name, int indent){ 
DIR *dir; 
struct dirent *sd; 
dir = opendir(name); 
while((sd = readdir(dir)) != NULL){ 
    if(sd->d_type == DT_DIR){ //if item is a directory, print its contents 
     char path[1024]; 
     if((strcmp(sd->d_name, ".")) !=0 && (strcmp(sd->d_name, "..")) != 0){ //skip '.' and '..' 
      printf("%*s[%s]\n",indent,"",sd->d_name); 
      rls_handler(path,indent+2); //recurse through rls_handler with subdirectory & increase indentation 
    }else{ 
     continue; 
    }  
    }else{ 
    printf("%*s- %s\n",indent, "", sd->d_name); 
    } 
}//end while 
closedir(dir); 
}//end rls_handler 

私は次の行にsegfaultを得ています:while((sd = readdir(dir)) != NULL)。なぜ私はこのエラーが発生しているのか理解できる人はいますか?

dir = opendir(name); 

dirがそれに取り組んで継続するnullではない:

+0

チェックのようになります。 – Neo

+0

'rls_handler(パス、インデント+ 2);' 'path'は初期化されていません。 –

答えて

2

呼び出した後かどうかを確認するためのテストを追加してください。

あなたのコードは、単にセグメンテーションフォルト前dir` `に何があるか

dir = opendir(name); 
if (dir!=NULL) 
{ 
while((sd = readdir(dir)) != NULL){ 
... 
} //end while 
closedir(dir); 
} // end if dir not NULL 
}//end rls_handler 
関連する問題