现在发现一个CString的容量比较小啊,当字符数大于512的时候就报错了。如何才能扩充CString的容量呢?我用getbuffer去扩充容量,发现还是会报错啊。下面的这个代码究竟有什么错啊?请大侠们指点啊!!!!
CString str="";
LPTSTR p = str.GetBuffer(10000);
strcpy(p,"//一个很长的字符串//");
str.ReleaseBuffer();
TRACE("%s \n",str);中间那个是个字符数不确定的字符串,可能很大,也可能很小,姑且按照很大计算吧,范围在500-3000之间吧。这个该怎么做?
CString str="";
LPTSTR p = str.GetBuffer(10000);
strcpy(p,"//一个很长的字符串//");
str.ReleaseBuffer();
TRACE("%s \n",str);中间那个是个字符数不确定的字符串,可能很大,也可能很小,姑且按照很大计算吧,范围在500-3000之间吧。这个该怎么做?
{
#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,就出事了.
buffer=new char[10000];
srpintf(buffer,"%s","一个很长的字符串");
比方
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;
CAtlStringMgr strMgr(&heap);
CString str(&strMgr);这样试试呢。
这样使用没问题。
它每次都重新分配内存
不过长度比较大的时候,一直扩充内容,会非常浪费时间
多谢各位了啊。