2010-06-12 2 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++를 사용하는 경우 :

#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

+1

@Nick Youdon은 dirname에 메모리를 할당하지 않습니다. 메모리를 할당했다면 비어 있는지 테스트하는 방법은'if (! strcmp (dirname, ""))' –

5

변경 :

char *dirname = 0; 

에 :

char dirname[PATH_MAX] = "";