2013-05-02 2 views
4

그래서 기본적으로 나는 파일 이름 나에게 입력을 할 수 있습니다이어떻게 cin에 char 포인터를 할당합니까?

char* inputFileName; 
cout<< "Filename: "; cin>>*inputFileName; 

을하려고하지만 누를 때 내가 처리되지 않은 예외 오류가 입력 할 때. 어떤 아이디어? 내가

char* inputFileName; 
cout<< "Filename: "; cin>>inputFileName; 

을 시도하는 경우도

편집 나는 그것을 실행하려고하면 디버그 선언이 실패한 얻을.

+2

'inputFileName'은 (매달리는) 포인터 일 뿐이며, 문자열에 대한 저장 공간을 제공하지 않습니다. 당신은 문자열을위한 메모리를 할당해야한다. 지금은 무작위 (잠재적으로 무효 인) 메모리 위치에 읽은 문자를 쓰는 것을'cin '이라고 말하는 것이다. 책을 읽으 려하기 전에 C 문자열을 연구하십시오. –

+0

@MatteoItalia가 옳습니다. 또한, 당신은'inputFileName'을 역 참조해서는 안됩니다. – Ryan

+3

올바른 방법은 'char *'를 사용하지 않는 것입니다. 그게'std :: string'을위한 것입니다. – chris

답변

8

당신은 포인터가 아닌 역 참조 포인터를 전달해야하고, 문자 메모리를 할당 한 *

#include <iomanip> 
#include <iostream> 
using namespace std; 

int main(){ 
    const size_t BUFFER_SIZE = 1024; 
    char inputFileName[BUFFER_SIZE]; 
    cout << "Filename: "; 
    cin >> setw(BUFFER_SIZE) >> inputFileName; 
    cout << inputFileName << endl; 
} 

char inputFileName[BUFFER_SIZE]; 외에 또 다른 옵션은

char *inputFileName = new char[BUFFER_SIZE]; 

이후

delete [] inputFileName; 
입니다
+3

delete [] (std :: string은 정말로 올바른 답이긴하지만) –

+0

문자 배열을 사용하는 대신 문자열을 사용하는 것이 더 간단 할 수 있다고 생각합니다. – cakil

+3

동의합니다. std :: string을 사용 하겠지만 질문에 답하려고했습니다. 물었다. –

5

다음을 사용해보십시오.

#include <iostream> 
using namespace std; 

int main() 
{ 
    char *inputFileName = new char[50]; 
    cout << "Filename: "; 
    cin >> inputFileName; 
    cout << inputFileName << endl; 
    /* .... */ 
    delete [] inputFileName; 
} 
관련 문제