Проблема: Как преобразовать CString в const char * в C ++ MFC - PullRequest
2 голосов
/ 31 марта 2011

Как мне преобразовать CString в const char *? Я перепробовал все найденное в интернете, но до сих пор не могу их конвертировать.

Пожалуйста, помогите.

Спасибо.

Ответы [ 5 ]

7 голосов
/ 31 марта 2011

CString приводит к константному символу * напрямую

CString temp;
temp = "Wow";
const char * foo = (LPCSTR) temp;
printf("%s", foo);

напечатает 'foo'

Более новая версия MFC также поддерживает метод GetString ():

CString temp;
temp = "Wow";
const char * foo = temp.GetString();
printf("%s", foo);
3 голосов
/ 31 марта 2011

Краткий ответ: используйте макрос CT2CA (см. Макросы преобразования строк ATL и MFC ). Это будет работать независимо от настройки «Набор символов» вашего проекта.

Длинный ответ:

  • Если вы определили символ препроцессора UNICODE (то есть, если TCHAR равен wchar_t), используйте макрос CT2CA или CW2CA.
  • Если вы этого не сделаете (то есть, если TCHAR равно char), у CString уже есть оператор для неявного преобразования в char const* (см. CSimpleStringT::operator PCXSTR).
0 голосов
/ 22 марта 2017

Первый: определить char * inputString;в your_file.h

Второе: определение в yourFile.cpp: CString MyString;

MyString = "Place here whatever you want";

inputString = new char[MyString.GetLength()];
inputString = MyString.GetBuffer(MyString.GetLength());

Последние два предложения преобразуют переменную CString в char *;но будьте осторожны, с CString вы можете хранить миллионы символов, но с char * no.Вы должны определить размер вашего символа * переменная.

0 голосов
/ 11 июля 2015

Я знаю, что уже поздно, но я не мог использовать решение с пометкой «как ответ». Я ищу по всему интернету, и у меня ничего не работает. Я мускулировал через это, чтобы получить решение:

char * convertToCharArr(CString str) {
    int x = 0;
    string s = "";
    while (x < str.GetLength()) {
        char c = str.GetAt(x++);
        s += c;
    }
    char * output = (char *)calloc(str.GetLength() + 1, sizeof(char));
    memcpy(output, s.c_str(), str.GetLength() + 1);
    return output;
}
0 голосов
/ 31 марта 2011

Если ваше приложение не является Unicode, вы можете просто привести тип к const char *. Используйте метод GetBuffer(), если вам нужен char *, который вы можете изменить.

Если ваше приложение - Unicode, и вы действительно хотите char *, то вам нужно будет конвертировать его. (Вы можете использовать такие функции, как MultiByteToWideChar().)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...