CString strfilter=CStaticVer::ms_strFilter;int strLength=strfilter.GetLength();char *filterBuffer=new char[strLength];//申请内存int x=sizeof(filterBuffer);memset(filterBuffer,0,sizeof(filterBuffer));int j=0;for (int i=0 ;i<strLength ;i++)
{
filterBuffer[i]=strfilter[i];
}//中间是处理代码delete [] filterBuffer; //释放内存
filterBuffer=NULL;
这个程序我是想把 CString 类型的转换为 char *型。这样做程序正常运行了一段时间后突然就不行了。Strfilter里面的值是 “(ip or arp)” 正常情况下转换后 filterBuffer 里面的值应该是一样的。在出错后跟踪发现 filterBuffer 里的值变成了这样: “(ip or arp ) ”为什么会这样的呢?
我用的是VC++ 2005 MFC请高手指教啊。。还有一个问题是:我用sizeof(filterBuffer)获取缓冲去长度是返回值总是 4 这是为什么?
{
filterBuffer[i]=strfilter[i];
}//中间是处理代码delete [] filterBuffer; //释放内存
filterBuffer=NULL;
这个程序我是想把 CString 类型的转换为 char *型。这样做程序正常运行了一段时间后突然就不行了。Strfilter里面的值是 “(ip or arp)” 正常情况下转换后 filterBuffer 里面的值应该是一样的。在出错后跟踪发现 filterBuffer 里的值变成了这样: “(ip or arp ) ”为什么会这样的呢?
我用的是VC++ 2005 MFC请高手指教啊。。还有一个问题是:我用sizeof(filterBuffer)获取缓冲去长度是返回值总是 4 这是为什么?
应该这样,最后一位应该定义成"\0"
filterBuffer里面的值也可能会这样“(ip or arp屯屯 屯屯屯屯屯屯)”
mxw0922太谢谢了
我愣是没考虑到这个。。太郁闷了
可能用了getbuffer下面加一句strfilter.ReleaseBuffer();
memset(filterBuffer,0,sizeof(filterBuffer)); sizeof(filterBuffer),你自己也知道结果了,总是4,所以你申请的内存只写了4个字节的0,后面都是乱码,缺少尾空,当然可能会看到任何字符了。解决上面这个问题,你首先要知道:
char ca[255], *cp=new char[255];
assert(sizeof(ca)==255);
assert(sizeof(cp)==4);
这样,你就知道
memset(filterBuffer,0,sizeof(filterBuffer)); //这里应该用char *filterBuffer=new char[strLength];中的strLength了*****
不过,你的问题CString到char*的转换,实际上没有这么麻烦
CString实现有(LPCTSTR)转换符,也就是CString直接可以用在需要LPCTSTR类型的环境中,就是 const TCHAR *,或者,在很多情况下,就是 const char *
如果你需要的是不带const的char*,你可以像下面这样:
char * sp = cstring.GetBuffer();
sp[3] = '\0';
...
cstring.ReleaseBuffer(); //与GetBuffer必须成对出现!!!