(C++) 문자열 입력받기
문자열을 입력 받을 때, 보통 cin>>을 사용한다.
하지만 cin을 통해 입력받을 때 문제점이있다.
1) 버퍼 오버플로우
cin으로 입력받는 배열의 크기를 넘어서는 문자열을 cin으로 입력받게 되면 배열의 크기를 넘어 다른 변수 소유의 메모리에 덮어 쓰게 된다.
이것은 의도하지 않은 변경을 발생시키며, 심각한 문제를 일으킬 수 있다.
2) cin을 사용한 연속된 문자열 입력시 공백처리
cin을 연속으로 사용하여 2번의 문자열을 받을 때 공백을 만나면 다음 cin의 변수로 데이터가넘어간다.
예를들어, I`m man을 입력하면, I`m은 첫번째 변수에, man은 두번째 변수에 들어간다.
공백처리를 하지 못하게 된다.
이러한 문제를 해결하기 위해, getline()을 사용한다.
(1) 배열에 문자열 입력
char cs[20];
cin.getline(cs,20);
문자열이 cs배열에 대입된다. 여기서 20개 이상의 문자열을 입력받으면,20까지만 입력받게 된다. 공백또한 포함하여 입력받는다.
(2) string에 문자열 입력
string cpps;
getline(cin,cpps);
->cin명령어로 받은 문자열을 cpps string변수에 담는다.
문자열의 크기의 제한은 없다.
공백또한 포함하여 입력받는다.
하지만 cin을 통해 입력받을 때 문제점이있다.
1) 버퍼 오버플로우
cin으로 입력받는 배열의 크기를 넘어서는 문자열을 cin으로 입력받게 되면 배열의 크기를 넘어 다른 변수 소유의 메모리에 덮어 쓰게 된다.
이것은 의도하지 않은 변경을 발생시키며, 심각한 문제를 일으킬 수 있다.
2) cin을 사용한 연속된 문자열 입력시 공백처리
cin을 연속으로 사용하여 2번의 문자열을 받을 때 공백을 만나면 다음 cin의 변수로 데이터가넘어간다.
예를들어, I`m man을 입력하면, I`m은 첫번째 변수에, man은 두번째 변수에 들어간다.
공백처리를 하지 못하게 된다.
이러한 문제를 해결하기 위해, getline()을 사용한다.
(1) 배열에 문자열 입력
char cs[20];
cin.getline(cs,20);
문자열이 cs배열에 대입된다. 여기서 20개 이상의 문자열을 입력받으면,20까지만 입력받게 된다. 공백또한 포함하여 입력받는다.
(2) string에 문자열 입력
string cpps;
getline(cin,cpps);
->cin명령어로 받은 문자열을 cpps string변수에 담는다.
문자열의 크기의 제한은 없다.
공백또한 포함하여 입력받는다.
댓글
댓글 쓰기