大牛们,救急,呼告 !char * 转换成LPCTSTRchar * 转换成LPCTSTR该怎么转啊?下面这两种均不管用。求有效的方
大牛们,救急,呼告 !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函数吗?
[解决办法]
你多了一个指针符*
[解决办法]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);
}