2010-06-12 5 views
1

Je suis nouveau en C++ et j'expérimente avec l'en-tête dirent.h pour manipuler les entrées du répertoire. La petite application suivante compile mais vomit après avoir ajouté un nom de répertoire. Quelqu'un peut-il me donner un indice? L'int quit est là pour fournir une boucle while. J'ai enlevé la boucle dans le but d'isoler mon problème.Comment utiliser correctement dirent.h

merci!

#include <iostream> 
#include <dirent.h> 

using namespace std; 

int main() 
{ 

char *dirname = 0; 
    DIR *pd = 0; 
    struct dirent *pdirent = 0; 

    int quit = 1; 



    cout<< "Enter a directory path to open (leave blank to quit):\n"; 
    cin >> dirname; 

    if(dirname == NULL) 
    { 
     quit = 0; 

    } 
     pd = opendir(dirname); 

    if(pd == NULL) 
    { 
     cout << "ERROR: Please provide a valid directory path.\n"; 
    } 


    return 0; 
} 

Répondre

7

Si vous utilisez C++, ne pas utiliser char * ou des tableaux, utilisez std :: string:

#include <string> 
.... 
string dirname; 
cout<< "Enter a directory path to open (leave blank to quit):\n"; 
getline(cin, dirname); 
if (dirname == "") { 
    exit(1); 
} 
.... 
pd = opendir(dirname.c_str()); 
+0

L'utilisation d'une chaîne a résolu mon problème. Quel était le problème avec ma mise en œuvre de style c? – Nick

+1

@Nick Youdon n'allouer aucune mémoire à dirname. Si vous aviez alloué la mémoire, la façon de tester si elle était vide aurait été 'if (! Strcmp (dirname," "))' –

5

Change:

char *dirname = 0; 

à:

char dirname[PATH_MAX] = ""; 
Questions connexes