求Cstring转const char*方法~MFC(C)

我用MFC的CFILEDIALOG来打开文件,它是用"CString"记录下全条文件的路径~
我把文件名提了出来..(C:\XXX\XXX\XXX\111.txt)
把111.txt这个文件名拿了出来...
CString name=111.txt;
但是我现在要用一个函数,它是要用const char*来读取档案的~
我上网找了很多方法~好像不太行~
我正运行的是unicode字符集。。。=~=
求解答~THX
打错了~标题是C++..

如果你用的是unicode的话,那么CString里面存储的是wchar_t*,而不是char*。你确定要把CString转换成char*的话,还要用其他的函数:
const wchar_t* wstr = ( LPCTSTR )name; //一定得是unicode,否则这句话会错的
char str[ 20 ] = { 0 };
wcstombs( str, wstr, wcslen( wstr ) );
执行完后,str中的数据就是"111.txt"了。str可以赋值给一个const char*。
注意:如果CString里有中文的话,在wcstombs前后还应加这么两句:
setlocale( LC_ALL, "chs" );
wcstombs( str, wstr, wcslen( wstr ) );
setlocale( LC_ALL, "C" );
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-27
不多说直接上代码
char* CStringToCharArray(CString str)
{
char *ptr;
#ifdef _UNICODE
LONG len;
len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
ptr = new char [len+1];
memset(ptr,0,len + 1);
WideCharToMultiByte(CP_ACP, 0, str, -1, ptr, len + 1, NULL, NULL);
#else
ptr = new char [str.GetAllocLength()+1];
sprintf(ptr,_T("%s"),str);
#endif
return ptr;
}
第2个回答  2012-03-30
WideCharToMultiByte
然后用(const char*)强制转换指针
第3个回答  2012-03-27
asdf
相似回答