자꾸 잊는 프로그래밍 이야기에 대하여
아래는 제가 자주 잊어버리는 내용이면서도 항상 중요하거나 가끔 반드시 필요한 내용을 정리한 내용입니다. 이러한 글을 시작하게 된 것은 제 홈페이지에서 였습니다. 그런데 포프님께서 아이디어가 좋다는 말씀으로 인해 제 홈페이지의 글들을 정리하여 새롭게 만들게 된 것입니다.1. 입력 루틴
일반적으로 char배열을 이용하여 입력을 받는 것은 유연성이 없으면 버퍼 오버런 등의 취약성을 가지게 됩니다. 이와 같은 문제점으로 인해 저는 입력이 필요한 경우는 동적으로 입력을 받게 하고자 노력했습니다. 그런데 콘솔로 작은 프로그램을 만들게 될 때 매번 동적으로 입력받는 루틴을 잊어버려서 다시금 제가 책을 찾아보게 됩니다. 그래서 이 동적 입력 루틴에 대한 내용을 정리한 것입니다.
첫번째는 가장 간단한 cin으로부터 Standard C++ Library의 string으로 입력을 받는 루틴입니다.
int main()
{
string str;
cout << "Please enter your name\n";
cin >> str;
cout << "Hello " << str <<"!\n";
}
string의 경우 위와 같이 크기가 정해져 있지 않아도 입력을 받을 수 있습니다. 단 줄단위가 아니라 공백 단위로 입력을 받게 됩니다. (물론 엔터키가 눌리면 공백과 같이 입력이 끝나게 되겠죠?)
int main()
{
string str;
cout << "Please enter your name\n";
getline(cin, str);
cout << "Hello, " << str << "!\n";
}
위의 코드는 줄단위로 입력을 받는 방법입니다. str은 줄이 끝날 때까지 계속 입력을 받게 됩니다.
int main()
{
istream_iterator<string> ii(cin);
string s1 = *ii;
++ii;
string s2 = *ii;
cout << s1 << ' ' <<s2 << '\n';
}
이것은 공백 단위로 입력을 받는 것입니다. 하지만 istream_iterator를 이용하여 입력을 받는다는 것이 다르죠. STL을 모르시는 분께서는 저기의 문법이 무척 이상하게 보이고 좋아보이지도 않으시겠지만, 사실 STL을 공부한 후에는 저런 표현법은 무척 멋있어 보이기도 합니다. 같은 입력을 받고 있지만, 전혀 다른 표기법이라서 혼동이 올 수도 있습니다. 하지만 저 표현법은 template 프로그래밍을 하게 될 때 무척 많은 장점을 주게 됩니다.
위에서 3가지 형태의 입력을 받아 보았습니다. 뭐 특별한 내용도 없으며, 그다지 어려운 내용도 없었습니다만, 이 내용들을 저는 자꾸 잊게 되더군요.
저술정보
- 자꾸 잊는 프로그래밍 이야기 1편
- 저자: 류인환(rihwan)
- 저술일: 2005년 9월 13일