我通过cedit1.GetWindowTextW(str);得到CString型的str; 可是无法将str转化成char *的, 版上看到的那些方法(getbuffer,sprintf,(LPSTR)(LPCTSTR)..)都会出错 还有可以通过cedit1.getline()方法,得到LPTSTR str. 怎么转化成char *的呢?
☆──────────────────────────────────────☆ kewpie (烤火炉的香山芋) 于 2006年11月21日22:45:23 星期二) 提到:
CStringW strW; cedit.GetWindowTextW(strW); CStringA strA(strW); // 让CStringA的构造函数自动转换
或者
用一些将宽字转换为单字的函数或宏,比如 1、宏W2A 2、辅助类CW2A 3、WideCharToMultiByte
转成CStringA后就可以直接转化为 char* p = (char*)strA.GetString();
☆──────────────────────────────────────☆ blueskyeyes (陌上年少★唯楚有才) 于 2006年11月22日00:36:10 星期三 提到:
谢谢,已搞定 也可以char * p= const_cast<char*>((LPCSTR)strA)
如果要用CStringA ,这时候project里需要设置使用多字节字符集
☆──────────────────────────────────────☆ enjoysoft (Enjoy — 享受生活) 于 2006年11月22日12:20:26 星期三 提到:
这个做法是不正确的!strA返回给你的是一个const,不知道什么时候这里就不是原来那 个string了,因为这个指针受cstring控制,不受你的控制。人家返回一个只读的,硬要 保留一个可读写的,不是很危险吗?
如果工程是多字节的,CString就是CStringA
kewpie的是正解,你也可以使用一个const char*来访问字符串。如果你要修改字符串的 话,最好自己分配一个,然后strcpy
CString str; ... char *p = new char[str.GetLength]; strcpy(p, str); ... delete []p;
☆──────────────────────────────────────☆ blueskyeyes (陌上年少★唯楚有才) 于 2006年11月22日12:24:57 星期三 提到:
呵呵,谢谢你。我改了
☆──────────────────────────────────────☆ blueskyeyes (陌上年少★唯楚有才) 于 2006年11月22日16:50:47 星期三 提到:
现在的问题,如果要用CStringA,那么必须设置成使用 多字节字符集,这时候CString的使用会出现一些莫名其妙的错误 而使用unicode字符集的话,不会出现错误。 如果设置成使用unicode字符集, CString str; cedit1.GetWindowText(str) strcpy(p,str)事,会提示CString无法转化成char *. 怎么在使用unicode字符集的前提下,将CString转化成char *呢 望赐教
☆──────────────────────────────────────☆ blueskyeyes (陌上年少★唯楚有才) 于 2006年11月22日18:39:15 星期三 提到:
在创建project时,如果不用默认的unicode字符集,就没什么问题了
☆──────────────────────────────────────☆ enjoysoft (Enjoy — 享受生活) 于 2006年11月22日21:47:15 星期三) 提到:
CString str(_T("Hello")); // 随便设置成Unicode与否 // Convert a TCHAR string to a LPCSTR CT2CA pszAnsiString (str);
// 然后再 strcpy(p,pszAnsiString);
看一下MFC/ATL的字符转换类CT2CA之类的
|