2010-06-12 34 views
1

我是C++的新手,我正在嘗試使用dirent.h頭來操作目錄條目。在你修改一個目錄名稱之後,下面的小應用程序會編譯但是會嘔吐。有人可以給我一個提示嗎? int的退出是爲了提供一個while循環。我刪除了該循環以嘗試隔離我的問題。如何正確使用dirent.h

謝謝!

#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; 
} 

回答

7

如果您使用的是C++,不使用的char *或者陣列,使用的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

使用字符串確實解決了我的問題。我的C風格實現有什麼問題? – Nick 2010-06-13 02:40:24

+1

@Nick Youdon不會爲dirname分配任何內存。如果你已經分配了內存,那麼測試它是否爲空的方法就是'if(!strcmp(dirname,「」))'' – 2010-06-13 07:33:54

5

變化:

char *dirname = 0; 

到:

char dirname[PATH_MAX] = "";