2009년 09월 14일
VC++ 6.0의 getline() 버그
간단한 스트링을 다루는 예제를 만들고 있었는데 이게 어찌된 영문인지 아무리 봐도 논리상 아무 문제가 없는데 제가 의도하는대로 작동을 안하는겁니다.
이게 어찌된건가 싶어서 차근차근 디버그를 돌려봐도 해결이 안났는데..
문제는 getline()함수에서 발생했습니다.
string str;
cout << "문자열을 입력하시오 (끝내려면 q) : ";
getline(cin, str);
라는 간단한 문장인데. 이놈의 망할 getline이 엔터를 두번 입력 받아야 다음으로 진행이 되는겁니다. 더군다나 다음번에 또 getline 함수를 통해 문자열을 입력받으면 입력받은 것이 하나씩 밀리는 사태가 발생하더군요.
이게 왜 그런가, 하면서 고민 고민을 했더라죠.
이것만 만들고 좀 자야겠다, 싶었는데 이런데서 어이없게 막히니 분통이 터져서 계속 들여다볼 수 밖에 없었습니다.
결국 혼자 해결하길 포기하고 구글신님께 여쭤보았더니........
Visual C++ 6.0의 버그라고 하는군요. 아놔.
이게 getline()이 string함수의 메소드가 아닌 friend함수로 사용되서 생기는 버그라고는 하는데..
그래서 버그 패치를 구해서 패치 후 다시 컴파일하니 정상적으로 작동하는군요. 아놔. 날린 아까운 시간이 어찌나 길고 긴지 ㅠ_ㅠ
확실히 VC++이면 거의 10년에 가까운 유구한 역사를 자랑하는(?) 컴파일러입니다만 역시 이제 2008로 옮겨타야 할 시기가 확실히 오긴 온 것 같습니다. PC만 좀 사양이 더 좋았다면 바로 2008로 갈아탈텐데.. 슬프군요.
첨부 파일은 VC++ 6.0의 getline함수 버그를 패치해 주는 프로그램입니다.
보통 자동으로 설치가 되는 위치인 C:\program files\... 에는 정상적으로 되는진 모르겠는데 저는 D 드라이브에 제 맘대로 설치해서 그런지 자동으로 잡아주진 못하는 듯 합니다.
패치가 정상적으로 안될 경우 VC60폴더의 include 안에서 실행하면 정상적으로 패치가 될 것입니다.getline_fixer.zip
# by | 2009/09/14 20:33 | Developer | 트랙백 | 덧글(4)



![자우림 7집 - Ruby Sapphire Diamond [통에 든 포스터 증정]](http://image.aladdin.co.kr/coveretc/music/coveroff/9231381946_1.jpg)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Visual C++ 2005 Express판을 추천드립니다!
2005 Express는 [과장좀 섞어서] 6.0급으로 빨라요
6.0은 간단한 콘솔 어플을 작성하거나 강의용(?) 자료 만들때나 쓰고 있죠.