MFC中 CString 转换成string 谁能告诉我,万分感谢~
CStringfile1;std::stringfilename;试过很多方法使file1转换成filename如:std::stringfilename(Dlg.m_f...
CString file1;
std::string filename;
试过很多方法使file1 转换成filename
如:std::string filename(Dlg.m_filename1.GetBuffer(0));
//char *chr=new char[Dlg.m_filename1.GetLength()];
//WideCharToMultiByte(CP_ACP,0,Dlg.m_filename1.GetBuffer(),-1,chr,Dlg.m_filename1.GetLength(),NULL,NULL);
//filename=chr
都不对啊,怎么办??愁死认了
error C2664: “std::basic_string<_Elem,_Traits,_Ax>::basic_string(std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it)”: 不能将参数 1 从“wchar_t *”转换为“std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it”
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> struct“std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it”的构造函数声明为“explicit”
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ] 展开
std::string filename;
试过很多方法使file1 转换成filename
如:std::string filename(Dlg.m_filename1.GetBuffer(0));
//char *chr=new char[Dlg.m_filename1.GetLength()];
//WideCharToMultiByte(CP_ACP,0,Dlg.m_filename1.GetBuffer(),-1,chr,Dlg.m_filename1.GetLength(),NULL,NULL);
//filename=chr
都不对啊,怎么办??愁死认了
error C2664: “std::basic_string<_Elem,_Traits,_Ax>::basic_string(std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it)”: 不能将参数 1 从“wchar_t *”转换为“std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it”
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> struct“std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it”的构造函数声明为“explicit”
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ] 展开
4个回答
展开全部
第一种方法:先利用CString类提供的operator LPCTSTR转换函数将CString对象转换为一个C风格字符串,然后再转换成string类型,例如:
std::basic_string<TCHAR> filename((LPCTSTR) file1);
第二种方法:
std::basic_string<TCHAR> filename(file1.GetBuffer(file1.GetLength()));
其实前两种方法的关键就是str::basic_string<TCHAR>。
第三种方法:这种方法也是我刚从网上找的,在VS2008的MFC的工程中编译通过,在别的地方调试可能要添加相关的头文件,CT2A 它定义在"atlconv.h"中。
CT2A xx(file1);
filename = xx;
以上三种方法我在VS2008种全部编译通过。
给分吧。
std::basic_string<TCHAR> filename((LPCTSTR) file1);
第二种方法:
std::basic_string<TCHAR> filename(file1.GetBuffer(file1.GetLength()));
其实前两种方法的关键就是str::basic_string<TCHAR>。
第三种方法:这种方法也是我刚从网上找的,在VS2008的MFC的工程中编译通过,在别的地方调试可能要添加相关的头文件,CT2A 它定义在"atlconv.h"中。
CT2A xx(file1);
filename = xx;
以上三种方法我在VS2008种全部编译通过。
给分吧。
展开全部
你这个比较特别,因为你的CString是使用的UNICODE,使用CStringA函数。
转换如下:
CString cstr = L"测试";
std::string str = CStringA(cstr);
MessageBoxA(NULL, str.c_str(), "", MB_OK);
转换如下:
CString cstr = L"测试";
std::string str = CStringA(cstr);
MessageBoxA(NULL, str.c_str(), "", MB_OK);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
filename= string(file1.GetBuffer(file1.GetLength()));
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
uses_convertion;
w2a宏
w2a宏
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询