CString cstring;
string temp=cstring.GetBuffer(0);

解决方案 »

  1.   

    谢谢楼上的大哥
    但还是出错了
    不知道怎么回事CString a;
    string b=a.GetBuffer(0);错误1 error C2440: 'initializing' : cannot convert from 'wchar_t *' to 'std::basic_string<_Elem,_Traits,_Ax>'
      

  2.   

    UNICODE编码
    CString str;
    调用
    setlocale(LC_ALL,"chs");
    char* p = new char[]足够长
    wcstombs( p ,str,str.GetLength() );
    std::string out = p;
    ASCII编码
    CString str;
    std::string str2 = (const char*)str;
      

  3.   

    谢谢了,楼上的方法可以
    最好改一下char* p = new char[str.GetLength()];
    应该不用足够长吧
      

  4.   

    char* p = new char[str.GetLength()];这样不对哦,一个汉字要占两个字节的
    可以用wcstombs 第一个参数为0则返回目标字符串的长度。
      

  5.   

    恩,是的
    学习中
    懂的东西太少了啊
    其实本来是老师叫我编个大数乘法的
    我用C++实现了
    但老师又叫我用VC++MFC搞个界面
      

  6.   

    发现基本上CString能代替string吧
      

  7.   

    用 new 生成的,还要注意释放!那就麻烦了。
      

  8.   

    CString str = "12345";char *p = str.GetBuffer(str.GetLength());string s(p);str.ReleaseBuffer();
      

  9.   

    string 转换 char *String s("11111");char *p = s.c_str();
      

  10.   

    char *chr=new char[wo.GetLength()]
    WideCharToMultiByte(CP_ACP,0,wo.GetBuffer(),-1,chr,wo.GetLength(),NULL,NULL);
      

  11.   

    #ifdef UNICODE
    typedef std::wstring stringT;
    #else
    typedef std::string stringT;
    #endif
    CString str = _T("123455");
    stringT Temp = str.GetBuffer(0);
      

  12.   

    测试过,成功!
    #include <string> 
    using namespace  std;
    CString strMfc="test"; 
    string strStl;
    strStl =strMfc.GetBuffer(0); 
      

  13.   

    对大家说的不太清楚,去网上看的资料,
     GetBuffer(int size)是用来返回一个你所指定大小可写内存的成员方法。它和被重载的操作符LPCTSTR还是有点本质区别的,LPCTSTR是直接返回一个只读内存的指针,而GetBuffer则是返回一个可以供调用者写入的内存,并且,你可以给定大小。下面是个简单的,但也是非常典型的例子:   int readFile(CString& str, const CString& strPathName)   {   FILE* fp = fopen(strPathName, "r"); // 打开文件   fseek(fp, 0, SEEK_END);   int nLen = ftell(fp); // 获得文件长度   fseek(fp, 0, SEEK_SET); // 重置读指针   char* psz = str.GetBuffer(nLen);   fread(psz, sizeof(char), nLen, fp); //读文件内容   str.ReleaseBuffer(); //千万不能缺少   fclose(fp);   }   上面的函数是GetBuffer函数最典型的用法了,其实它就相当于申请一块nLen大小的内存,只不过,这块内存是被引用在CString对象的内部而已,这是非常有效的一种用法,如果不直接用GetBuffer函数来申请的话,那么你必须用new操作符(或者malloc()函数)在CString的外部申请,然后再将申请的内存拷贝到CString对象中,显然这是一个非常冗余的操作,会使你函数的效率大大下降。   ReleaseBuffer函数是用来告诉CString对象,你的GetBuffer所引用的内存已经使用完毕,现在必须对它进行封口,否则CString将不会知道它现在所包含的字符串的长度,所以在使用完GetBuffer之后,必须立即调用ReleaseBuffer函数重置CString的内部属性,其实也就是头部信息。
      

  14.   

    UNICODE用wstring,ANSI用string;
    CString s1(TEXT("中华人民共和国"));
    wstring tmp(s1.GetBuffer());CString s2("中华人民共和国");
    string temp(s2.GetBuffer());
      

  15.   

    C++/web高手交流QQ群:15568154
    期待你的加入。
    一起讨论软件开发技术,项目交易经验。
      

  16.   

    其实你只要看一下CString在MFC的代码就很明白了
      

  17.   

    #include <atlbase.h>USES_CONVERSION;CString str(_T("..."));
    char* pbuf = T2A(str);