내 C++ 예제에 불쾌한 문제가 있습니다. 공백 문자를 입력 할 때까지 모든 것이 잘 작동합니다. 이상한 C++ 입력 이스케이프 및 공간 동작
#include <iostream>
using namespace std;
int main (int argc, char * const argv[])
{
int iteration = 0;
while (true) {
char * input = new char[256];
scanf("%s", input);
cout << ++iteration << ": " << input << endl;
cin.get();
}
return 0;
}
그래서이 코드와 함께, 난 아무것도 입력 할 수 있지만 공백 이후 모든 버퍼에 저장하고 두 번째 반복에서 사용 어떻게 든 같다.
foo
1: foo
bar
2: bar
foobar
3: foobar
foo bar
4: foo
5: bar
모든 단일 입력 읽기 기능이 작동하여 나를 미치게 만듭니다. cin >> input
, freads()
, cin.get()
등이 모두 수행합니다.
사용자 입력시 자주 발생하는 문제입니까? 아니면 여기에 잘못된 것이 있습니까?
메모리를 절대 삭제하지 마십시오. 당신은 모든 반복을 유출합니다. 크기를 하드 코딩하는 경우 (그리고 크기가 작을 때), 동적으로 할당하는 목적이 보이지 않습니다. 그냥'char input [256]'을 수행하십시오. 어쨌든 동적 배열이 실제로 필요하다면'std :: vector'를 사용하십시오. 정말로 원하는 것은'std :: string'입니다. – GManNickG
@GMan 감사합니다. 다음 번에 더 잘할 것입니다. –
사실. 기본적으로 가능한 한 동적 할당을 피하십시오. 그리고 필요할 때 자동으로 해제시켜 누출되지 않도록 수업을 이용하십시오. ('vector'와'string.'처럼) :) – GManNickG