tags:

views:

111

answers:

2

Hello,

I am new to C++ and I am experimenting with the dirent.h header to manipulate directory entries. The following little app compiles but pukes after you supple a directory name. Can someone give me a hint? The int quit is there to provide a while loop. I removed the loop in an attempt to isolate my problem.

thanks!

#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;
}
+4  A: 

Change:

char *dirname = 0;

to:

char dirname[PATH_MAX] = "";
Paul R
+6  A: 

If you are using C++, don't use char * or arrays, use 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() );
anon
Using a string did fix my problem. What was wrong with my c-style implementation?
Nick
@Nick Youdon't allocate any memory to dirname. If you had allocated the memory, the way to test if it was empty would have been `if( ! strcmp( dirname, "" ) )`
anon