vc8中,怎样将cedit空间中输入的字符串转化成char*
vc8中,怎样将cedit空间中输入的字符串转化成char*
我通过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
如果要用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之类的