大牛们,救急,呼告 !char * 转换成LPCTSTR

Jerry_Lee01 2013-09-13 09:19:40
char * 转换成LPCTSTR该怎么转啊?下面这两种均不管用。求有效的方法
1、
LPCTSTR lpszToPath = L"test";
2、
const char *buf = "test";
LPCTSTR *lpszFromPath = (LPCTSTR *)buf;
...全文
269 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
nextseconds 2013-10-09
  • 打赏
  • 举报
回复
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); }
haibiantingtao 2013-09-16
  • 打赏
  • 举报
回复
在C++builder XE的编译器里,可以进行设置,来确定映射成 char * 还是 wchar_t *,如下设置: Project->Option->C++(Shared Options) 右边的_TCHAR maps to 选成char 即可。 我想在VS2010中也会有类似的设置
Jerry_Lee01 2013-09-14
  • 打赏
  • 举报
回复
引用 6 楼 PPower 的回复:
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(); 重新编码后,注意一下生命期被改变。
很感谢啊,我是在vs2010中的win32里转化的。如果我一定要这样转化,vs2010默认是unicode编码,需要编码成什么呢?
勉励前行 2013-09-14
  • 打赏
  • 举报
回复
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(); 重新编码后,注意一下生命期被改变。
勉励前行 2013-09-14
  • 打赏
  • 举报
回复
一定要这样转化 程序就埋下了乱码及崩溃的可能性。  char * p = "Test" ; wchar_t *p = *(wchar_t **)&p ; //这样强制转换。 这就如,我就特意让我写的程序可能乱码及死掉。
ccrun.com 2013-09-14
  • 打赏
  • 举报
回复
LPCTSTR 根据工程中是否定义 _UNICODE 决定映射成 char * 还是 wchar_t * 拆开这个词: LP 是 long point 意为指针 C 是 const T 是 TCHAR STR 是字符串
chinayu2007 2013-09-13
  • 打赏
  • 举报
回复
引用 3 楼 woxiaozhi 的回复:
[quote=引用 2 楼 chinayu2007 的回复:] LPCTSTR lpszToPath; char * a="hello"; lpszToPath =(LPCTSTR)a ;
这个我试过了,无效的。[/quote]你多了一个指针符*
chinayu2007 2013-09-13
  • 打赏
  • 举报
回复
在哪里用?是api函数吗?
Jerry_Lee01 2013-09-13
  • 打赏
  • 举报
回复
引用 2 楼 chinayu2007 的回复:
LPCTSTR lpszToPath; char * a="hello"; lpszToPath =(LPCTSTR)a ;
这个我试过了,无效的。
chinayu2007 2013-09-13
  • 打赏
  • 举报
回复
LPCTSTR lpszToPath; char * a="hello"; lpszToPath =(LPCTSTR)a ;
sololie 2013-09-13
  • 打赏
  • 举报
回复
LPCTSTR lpszToPath = TEXT("test");

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧