2016-04-05 23 views
0

Kullanılabilir dizinlere ve dosyalara ek olarak listelenen dizini, dizinde kullanılabilir dizinleri ve dosyaları almak için C++ dirent.h kullanıyorum "." ve ".." Bunları kaldırmak için, baskıdan önce bir if ifadesi ekledim. şöyle kod şudur: bana bir derleme hatası vererek ama ne zaman bana veriyor yürütme değild_name ile bir cstring oluşturuluyor çekirdek dökümü

if ((dir = opendir (".")) != NULL) { 

    while ((ent = readdir (dir)) != NULL) 
    { 

     if(!strcmp(ent->d_name, ".")){ 
      printf ("%s\n", ent->d_name); 
     } 

     closedir (dir); 
    } 
} 
else { 
    //could not open directory 
    printf("Error opening directory"); 
} 

"çift serbest veya bozulması (üstte): 0x00000000016d3010 *** Kesildi (çekirdek döküldü)" Nasıl düzeltebilirim?

cevap

0

!strcmp karşılaştırma bir hatadır, ancak çakışma ile ilgisi yoktur. Bu, dizininin kapanması ve daha sonra girişleri okumaya devam edilmesinin neden olmasıdır.

Aşağıdaki programda hatalarınız yorumlanır ve düzeltilir.

#include <dirent.h> 
#include <stdio.h> 
#include <string.h> 

int main(int argc, char **argv) 
{ 
    DIR * dir = NULL; 
    if ((dir = opendir (".")) != NULL) { 

     struct dirent * ent = NULL; 
     while ((ent = readdir (dir)) != NULL) 
     { 

      // if(!strcmp(ent->d_name, ".")){ <-- Bug you have yet to find. 
      if(strcmp(ent->d_name, ".")){ 
       printf ("%s\n", ent->d_name); 
      } 

      // closedir (dir); <-- The cause of your crash 

     } 
     closedir (dir); 
    } 
    else { 
     //could not open directory 
     printf("Error opening directory"); 
    } 
    return 0; 
} 

BTW, bu programın yazıldığı dil C, C++ değil.

İlgili konular