Visual Studio 계열은 C++ 표준인 std::string 보다는 CString을 더 많이 사용한다.
구글에서 CString을 검색하면 나오는… 이 cstring 말고…
그런데, VC6의 CString::Replace()는 뭔가 문제가 있었던 것 같다.
이 CString…
VC6에서 Unicode 프로젝트를 돌리며 여러번 확인했었는데, Replace()는 문자열 치환을 한 번만 수행했다. 즉,
CString cs = _T("Hello World !");
cs.Replace(_T(" "), _T(" dirty "));
MessageBox(cs);
를 실행하면
Hello dirty World !
가 출력되었다.
도움말을 찾아보지도 않고 그러려니하고 써왔었는데, 우연한 기회에 VS2013에서 테스트해보니 정상적으로 동작했다.
속으로 '아… MS가 이런 변화를 별도로 공지하지 않았나…' 하고 있었는데, 도움말을 찾아보니 그게 아니었다.
이 함수는 원래부터 그렇게 디자인되어있었고, 단지 VC6에서 잘못 동작한 것이었다…
문제는 이게 정상인 줄 알고 작성한 코드가 꽤 되었고, 그걸 그대로 새 컴파일러로 돌린 경우가 있다는 것…
그리고, 그 코드가 바로 iTrans 라는 것 정도… lllorz