CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

一个奇怪的问题

楼主3di()2003-10-02 21:22:30 在 VC/MFC / 进程/线程/DLL 提问

我在做一个文本转换程序,我现在是将转换过程放在后台,我在转换函数中调用全局  
  函数时出了问题,比如调用这样的函数:  
  UINT   GenerateHTML(CString   &lparam)  
  {  
  for(int   i=0;i<lparam.GetLength();i+=2){  
  if(lparam.Mid(i,2)=="±")  
  lparam.Delete(i,2);  
                    }  
                    lparam+="&nbsp";  
  }  
  这样这个函数就无法正常工作,for语句中在文本的一万多行才找倒"±",而去掉  
  lparam+="&nbsp";就可以正常工作了,请教这是怎么回事? 问题点数: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+="&nbsp"又是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是多字节的,而之所以去掉"&nbsp"等正常,认为是由于"&nbsp"是5个字节长的,所以每次调用这个函数时,都使得i有可能撞对,即正好i及i+1表示"±",而不是i-1及i表示"±"。Top

5 楼3di()回复于 2003-10-05 21:43:38 得分 0

我使用fgets,每次只读如一行文本,并将该文本传给该函数,每次进入循环时,lparam都有所不同,因此在字符串的最后加&nbsp我觉的应该没有影响.请大家多指教.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

相关问题

  • 奇怪,奇怪
  • 奇怪,奇怪!
  • 奇怪奇怪???
  • 奇怪!奇怪
  • 奇怪奇怪...........?????...........
  • 奇怪!奇怪!真奇怪!!!
  • 奇怪奇怪真奇怪
  • 奇怪???奇怪??奇怪???
  • 奇怪奇怪真奇怪。
  • 奇怪奇怪奇怪................

关键词

  • 函数
  • 转换
  • 调用
  • 问题

得分解答快速导航

  • 帖主:3di
  • Gelim
  • tonybaobao
  • awant2k
  • lop5712
  • lop5712

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo