读书人

大牛们救灾呼告 !char * 转换成L

发布时间: 2013-11-01 14:43:02 作者: rapoo

大牛们,救急,呼告 !char * 转换成LPCTSTR
char * 转换成LPCTSTR该怎么转啊?下面这两种均不管用。求有效的方法
1、
LPCTSTR lpszToPath = L"test";
2、
const char *buf = "test";
LPCTSTR *lpszFromPath = (LPCTSTR *)buf;
[解决办法]
LPCTSTR lpszToPath;
char * a="hello";
lpszToPath =(LPCTSTR)a ;
[解决办法]
在哪里用?是api函数吗?
[解决办法]

引用:
Quote: 引用:

LPCTSTR lpszToPath;
char * a="hello";
lpszToPath =(LPCTSTR)a ;


这个我试过了,无效的。
你多了一个指针符*
[解决办法]
LPC 为C类型Long指针 TSTR 是一个可变的东西。
LPCTSTR 是一个宏,在不同的编译器不同的编译环境中,可能被解析为不同的内容。

可能为 const char * 也可能为 const wchar_t * ;

char * 转换成LPCTSTR该怎么转啊?
这个问题,如果LPCTSTR = const char * 问题就不存在了,出现了,就表示
LPCTSTR = const wchar_t*
那么楼主的问题就成了: char * 如何转换成const wchar_t*
我们知道char * 强制转换成const wchar_t* ,会出现乱码,甚至越界等未知行为因为 char*用一个字节0结束,而wchar_t*用两个字节0结束。所以char * 是不能强制转换成wchar_t* 的。必须重新编码:

char *a="test";
WideString b = a ;
LPCTSTR p = b.c_bstr();

重新编码后,注意一下生命期被改变。
[解决办法]
LPCTSTR 根据工程中是否定义 _UNICODE 决定映射成 char * 还是 wchar_t *

拆开这个词:
LP 是 long point 意为指针
C 是 const
T 是 TCHAR
STR 是字符串
[解决办法]
一定要这样转化 程序就埋下了乱码及崩溃的可能性。

 char * p = "Test" ;
wchar_t *p = *(wchar_t **)&p ; //这样强制转换。

这就如,我就特意让我写的程序可能乱码及死掉。

[解决办法]
在C++builder XE的编译器里,可以进行设置,来确定映射成 char * 还是 wchar_t *,如下设置:
Project->Option->C++(Shared Options) 右边的_TCHAR maps to 选成char 即可。
我想在VS2010中也会有类似的设置
[解决办法]
void CharToWChar(LPCSTR lpcszStr, LPWSTR lpwszStr)
{
DWORD dwMinSize;
dwMinSize = MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, NULL, 0);
MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, lpwszStr, dwMinSize);
}

读书人网 >C++ Builder

热点推荐