Mạnh Lê Ответов: 2

Зачем возвращать только первый символ при преобразовании cstring в LPCSTR


Зачем возвращать только первый символ при преобразовании Cstring в LPCSTR

Что я уже пробовал:

Уважаемый парень
Я конвертирую Cstring в LPCSTR с помощью некоторого кода ниже

CString strData1 = L"ABCDE";
LPCSTR spData = (LPCSTR)(LPCTSTR)strData1;
MessageBox(NULL, strData1, L"CString strData", MB_OK);      //=> ABCDE
MessageBox(NULL, (CString)spData, L"LPCSTR spData", MB_OK); //=> A  (What's problem)


Почему? LPCSTR spData - это (Первый символ CString в strData1)

Mohibur Rashid

Литье и преобразование-это не одно и то же.
взгляните на это https://msdn.microsoft.com/en-us/library/s7wzt4be(v=против 80). aspx

2 Ответов

Рейтинг:
5

Jochen Arndt

Как уже было сказано, вам нужно преобразование, а не кастинг. То CString класс может сделать это за вас:

// Your code assumes a Unicode build and this example too

CString strData1 = L"ABCDE";

// Create a CStringA. 
// The conversion from Unicode to ANSI is done by the CString class.
// May also use CStringA strData1A(strData1);
CStringA strData1A = strData1;

// Get a LPCSTR from the CStringA
LPCSTR spData = strData1A.GetString();

MessageBox(NULL, strData1.GetString(), L"CString strData", MB_OK);

// Create a CString (CStringW) from a LPCSTR with conversion
MessageBox(NULL, CString(spData).GetString(), L"LPCSTR spData", MB_OK);

Вы также должны избегать использования отливок в стиле Си. Вместо этого используйте операторы приведения C++ (см. Преобразования типов - учебники по C++ [^] и Операторы Литья[^]).


Mạnh Lê

Большое спасибо
CStringA strData1A(strData1)

Рейтинг:
1

Richard MacCutchan

Вы не можете использовать приведение для преобразования данных из одного типа в другой; см. Функция WideCharToMultiByte (Windows)[^]