vc8中,怎样将cedit空间中输入的字符串转化成char*

来源:百度文库 编辑:神马文学网 时间:2024/04/25 02:32:23

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((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之类的