一个奇怪的问题
我在做一个文本转换程序,我现在是将转换过程放在后台,我在转换函数中调用全局
函数时出了问题,比如调用这样的函数:
UINT GenerateHTML(CString &lparam)
{
for(int i=0;i<lparam.GetLength();i+=2){
if(lparam.Mid(i,2)=="±")
lparam.Delete(i,2);
}
lparam+=" ";
}
这样这个函数就无法正常工作,for语句中在文本的一万多行才找倒"±",而去掉
lparam+=" ";就可以正常工作了,请教这是怎么回事?
问题点数:20、回复次数:7Top
1 楼Gelim(Gelim)回复于 2003-10-03 21:23:29 得分 4
lparam是一个地址?Top
2 楼tonybaobao(Tony宝宝)回复于 2003-10-03 21:32:00 得分 4
i+=2??? 你的意思是他是一个32位的UNICODE字符?那你下面lparam+=" "又是16位的非UNICODE字符,这可能有点问题吧!我记得把字符串当作UNICODE字符的话,可以在前面加L,ex.
L"xxxxx"
我也不知道对不对。Top
3 楼awant2k(一点通)回复于 2003-10-04 09:56:47 得分 4
if(lparam.Mid(i,2)=="±")
改成
if(lparam.Mid(i,2)==L"±")Top
4 楼lop5712(LOP)回复于 2003-10-05 16:45:21 得分 4
如果你的lparam是一个多字节字符串,则需将i+=2改成i++,因为多字节时有些字符两个字节长而有些则一个字节长,所以应该i++。
如果是UNICODE,则上面的代码没错误,不用加L,CString自动封装了宽字节和多字节之间的转换,所以我以为楼主的lparam是多字节的,而之所以去掉" "等正常,认为是由于" "是5个字节长的,所以每次调用这个函数时,都使得i有可能撞对,即正好i及i+1表示"±",而不是i-1及i表示"±"。Top
5 楼3di()回复于 2003-10-05 21:43:38 得分 0
我使用fgets,每次只读如一行文本,并将该文本传给该函数,每次进入循环时,lparam都有所不同,因此在字符串的最后加 我觉的应该没有影响.请大家多指教.Top
6 楼lop5712(LOP)回复于 2003-10-06 12:55:50 得分 4
楼主有将i+=2改成i++试过吗?
因为楼主用多字节编码,"±"并不能保证每次都落在偶数边界上,所以不能用i+=2
如果楼主的lparam每次都只是一行??那“for语句中在文本的一万多行才找倒"±",”又怎能在一万多行才找到??Top
7 楼3di()回复于 2003-10-22 10:47:57 得分 0
对不起,是我没有说清楚,我是循环调用该函数的,调用了一万多次,也就是
读了一万多行,才找到。
这个现在我也糊涂当时是怎么写的了,我现在是遇到第一个字节小于零的就
加2,否则加1,只加1的话,Mid可能会越界,现在把它放在主函数里是行了,
但不知有没有问题,以后看着再说吧,谢谢。Top




