Visual Studio 계열은 C++ 표준인 std::string 보다는 CString을 더 많이 사용한다.


구글에서 CString을 검색하면 나오는… 이 cstring 말고…


그런데, VC6CString::Replace()는 뭔가 문제가 있었던 것 같다.


이 CString…


VC6에서 Unicode 프로젝트를 돌리며 여러번 확인했었는데, Replace()는 문자열 치환을 한 번만 수행했다. 즉,

CString cs = _T("Hello World !");
cs.Replace(_T(" "), _T(" dirty "));
MessageBox(cs);


를 실행하면

Hello dirty World !


가 출력되었다[각주:1].
도움말을 찾아보지도 않고 그러려니하고 써왔었는데, 우연한 기회에 VS2013에서 테스트해보니 정상적으로 동작했다.

속으로 '아… MS가 이런 변화를 별도로 공지하지 않았나…' 하고 있었는데, 도움말을 찾아보니 그게 아니었다.

이 함수는 원래부터 그렇게 디자인되어있었고, 단지 VC6에서 잘못 동작한 것이었다…
문제는 이게 정상인 줄 알고 작성한 코드가 꽤 되었고, 그걸 그대로 새 컴파일러로 돌린 경우가 있다는 것…
그리고, 그 코드가 바로 iTrans 라는 것 정도… lllorz



  1. 물론, 정상적으로 동작한다면 Hello dirty World dirty ! 가 되어야 함 [본문으로]

+ Recent posts