为什么在将cstring转换为LPCSTR时只返回第一个字符 [英] Why return only first character when convert cstring to LPCSTR

查看:105
本文介绍了为什么在将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. The CString 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆