现在发现一个CString的容量比较小啊,当字符数大于512的时候就报错了。如何才能扩充CString的容量呢?我用getbuffer去扩充容量,发现还是会报错啊。下面的这个代码究竟有什么错啊?请大侠们指点啊!!!!
CString str="";
LPTSTR p = str.GetBuffer(10000);
strcpy(p,"//一个很长的字符串//");
str.ReleaseBuffer();

TRACE("%s    \n",str);中间那个是个字符数不确定的字符串,可能很大,也可能很小,姑且按照很大计算吧,范围在500-3000之间吧。这个该怎么做?

解决方案 »

  1.   

    没什么问题吧,我编辑框绑定的CString变量一篇英语文章都可以放啊,好几千个字节呢
      

  2.   

    帮你测试过了,CString没问题的,问题出在TRACE的函数里面.void AFX_CDECL AfxTrace(LPCTSTR lpszFormat, ...)
    {
    #ifdef _DEBUG // all AfxTrace output is controlled by afxTraceEnabled
    if (!afxTraceEnabled)
    return;
    #endif va_list args;
    va_start(args, lpszFormat); int nBuf;
    TCHAR szBuffer[512]; nBuf = _vsntprintf(szBuffer, _countof(szBuffer), lpszFormat, args);拿了里面的代码看过,只分配了512个字符,大于512,就出事了.
      

  3.   

    char *buffer;
    buffer=new char[10000];
    srpintf(buffer,"%s","一个很长的字符串");
      

  4.   

    CString不用扩容吧,直接赋值就可以了,想多大就多大,人家是自动的。
    比方
    CString cstr = _T(""); //长度为0假如你有一个几十M的文本文件,几百兆也没关系。
    CFile f;
    f.Open(_T("xxxx.txt"),CFile::modeRead);
    ULONGLONG ull = f.GetLength();
    BYTE* buffer = new BYTE[ull+1];
    f.Read(buffer,ull);
    f.Close();
    buffer[ull] = 0;          //准备了数据cstr = buffer;            //现在看看你的CString 够不够大?delete [] buffer;
      

  5.   

    CWin32Heap heap(0,0,0);
    CAtlStringMgr strMgr(&heap);
    CString str(&strMgr);这样试试呢。
      

  6.   

    楼主这个不关CString的事,TRACE的代码写着,最多512个字符.
      

  7.   

    str.GetBuffer(0);
    这样使用没问题。 
      

  8.   

    7楼说的对的, TRACE有限制的。 你可以把str分几次 TRACE
      

  9.   

    Cstring完全不用扩容
    它每次都重新分配内存
    不过长度比较大的时候,一直扩充内容,会非常浪费时间
      

  10.   

    哈哈,CString是没有任何限制的,是最好的一个数据类型了
      

  11.   

    呵呵,今天测试了一把,CString确实是没有问题的,呵呵,是TRACE的问题 
    多谢各位了啊。