2012-04-02 3 views
3

프로그래밍에서 백업을 시도하고 문제를 이해하지 않는 한 어떻게 든 놓친 것을 알기 위해 노력 중입니다. 사용자에게 프로젝트의 이름을 입력하라는 메시지를 표시하려고하고 있는데 그 이름을 변수에 저장하려고합니다. 일반적으로 getline() 또는 std::cin >> std::string some_string을 사용 하겠지만 할당은 문자열을 사용하지 않고이 작업을 수행하도록 요청합니다. "문자열 클래스를 사용할 수 없습니다. 대신 배열의 문자를 사용하십시오." 거기에 질문이 있습니다. 사용자 입력을 가져 와서 문자 배열로 저장하려면 어떻게해야합니까?사용자 입력이 char 배열로 저장 됨 (C++)

사용자가 단어를 입력 한 다음 Enter 키를 누릅니다 ... 어떻게 문자 배열로 캡처합니까? 단어가 한 번에 한 문자 씩 들어 오면 필자는 배열에이를 추가하고 필요에 따라 동적으로 확장 할 수 있습니다. 그러나 숯의 블록과 같이 생각하면 길을 잃습니다. 감사!

답변

5

멤버 함수 cin.getline()을 사용하면 문자 버퍼와 길이를 지정할 수 있습니다.

char name[32]; 
cin.getline(name, 32); 

문자열 (특히이 컨텍스트에서) 대신 문자 배열을 사용하도록 특별히 요구하는 C++ 할당이 의심 스럽지만.

+0

'cin.getline (이름, sizeof 연산자 (이름));' – karlphillip

+1

@karl는 : name' 포인터로 변경'경우 때문에 위험한, 여전히 컴파일되지만를 수행 틀린 것. –

+0

물론이 제안은 답안에 언급 된 내용과 관련이 있습니다. @Chad가 포인터를 사용했다면, 나는 이전의 코멘트를 남기지 않았을 것입니다. :) – karlphillip

0

이 시도 :

char arr[100]; 
cin >> arr; 
+0

끔찍한 생각. 버퍼를 보장 할 수있는 방법은 오버 플로우되지 않습니다. 이런 종류의 일은 벌레를 길로 인도합니다. –

+1

참고 :이 프로그래밍 과정을 마친 후에는 ** 절대 **해야합니다. 다양한 보안 버그의 근본 원인 인 버퍼 오버 플로우가 발생했습니다. –

+0

미리'cin.width (100);'를 호출하십시오. –

관련 문제