Если у вас есть доступ к ATL, который, как я полагаю, у вас есть, если вы используете CString, вы можете посмотреть классы преобразования ATL , например CT2CA.
CString fileExt = _T ("txt");
CT2CA fileExtA (fileExt);
Если необходимо выполнить преобразование (как при компиляции для Unicode), CT2CA выделяет некоторую внутреннюю память и выполняет преобразование, уничтожая память в ее деструкторе. При компиляции для ANSI преобразование не требуется, поэтому он просто привязывается к указателю на исходную строку. Он также обеспечивает неявное преобразование в const char *
, поэтому вы можете использовать его как любую строку в стиле C.
Это делает преобразование действительно простым, с оговоркой, что если вам нужно повесить строку после того, как CT2CA выйдет из области видимости, то вам нужно скопировать строку в буфер под вашим контролем (а не просто сохранить указатель на Это). В противном случае CT2CA очищает конвертированный буфер, и у вас есть свисающая ссылка.