我们WINCE6.0设备用delete删除字符串不起作用
大家好,最近遇到客户反馈一个这样的问题:说我们的WINCE6.0设备用delete删除字符串不起作用,而同样的程序在另一个也是用WINCE6.0的设备上却是正常的,代码如下,大家有没有遇到这样的问题,麻烦大家帮忙分析一下,下面示意代码:
//这个函数就是把输入的字符串,转成对应的浮点数
//例如,把字符串“8”,转换成实际的数字8
//我输入的字符依次是1,0,2,1,3,9,10,1......从10后面的1开始出问题了,按道理//输入“1”,算出来的应该是1,但是算出来的是10
float CDataTable::GetLongvalue(CString strlong)
{
float fMinValue =0.0;
int length = strlong.GetLength();
char *buf;
buf=new char[length];
ZeroMemory(buf,length );
for(int j=0;j <length;j++)
{
buf[j]=(char)strlong.GetAt(j);
//buf[j]=(char)strlong[j];
}
fMinValue = (float)atof(buf);
buf=NULL;
delete []buf;
buf=NULL;
return fMinValue;
}
[解决办法]
buf=new char[length]; 最好长度能加 1,即保证最后一定会有一个结束符。
[解决办法]
1楼那个说的对,在new的时候要+1的长度,new完之后要对数组进行清零操作。这样可以减少未知情况的发生。
我之前就试过new完之后没有清空数组,导致算出来的数乱七八糟的。
[解决办法]
不知道那些函数你自己是如何定义的。为何buf=NULL;然后又delete。atof只转换第一个元素吗?代码好乱,没注释。
[解决办法]
函数的参数:CString strlong
注意一下:wince是unicode编码的,赋到char的话,是需要转换的,要不然就都是用char,比较省事。