为什么在将cstring转换为LPCSTR时只返回第一个字符 [英] Why return only first character when convert cstring to LPCSTR
本文介绍了为什么在将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(有什么问题)
为什么 LPCSTR spData是A (首先 Cstring strData1 )的字符
解决方案
您不能使用强制转换将数据从一种类型转换为另一种类型;请参阅 WideCharToMultiByte功能(Windows) [ ^ ]
如前所述,您需要转换而不是转换。CString
类可以为您做到这一点:
//您的代码假定为Unicode构建,此示例也是
CString strData1 = LABCDE;
//创建一个CStringA。
//从Unicode到ANSI的转换由CString类完成。
//也可以使用CStringA strData1A(strData1);
CStringA strData1A = strData1;
//从CStringA获取LPCSTR
LPCSTR spData = strData1A.GetString();
MessageBox(NULL,strData1.GetString(),LCString strData,MB_OK);
//从LPCSTR创建CString(CStringW),转换
MessageBox(NULL,CString(spData).GetString(),LLPCSTR spData,MB_OK);
你还应该避免使用C风格的铸件。请改用C ++强制转换运算符(请参阅类型转换 - C ++教程 [ ^ ]和营销运营商 [ ^ ])。
Why Return only First Character when Convert Cstring to LPCSTR
What I have tried:
Dear guy
I'm convert Cstring to LPCSTR with some code below
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)
Why LPCSTR spData is A (First Character of Cstring strData1)
解决方案
You cannot use a cast to convert data from one type to another; see WideCharToMultiByte function (Windows)[^]
As already said you need a conversion instead of a casting. TheCString
class can do that for you:
// 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);
You should also avoid using C style castings. Use the C++ casting operators instead (see Type conversions - C++ Tutorials[^] and Casting Operators[^]).
这篇关于为什么在将cstring转换为LPCSTR时只返回第一个字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文