(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변수에 담는다.
문자열의 크기의 제한은 없다.
공백또한 포함하여 입력받는다.





댓글

이 블로그의 인기 게시물

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬

(18장) WebSocekt과 STOMP를 사용하여 메시징하기