完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
各位高手,小弟正在开发电子词典,使用linux下C编程技术。从网上下载了一个WINDOWS下的电子词典源代码,然后下载了一个dict.txt文件。移植了一小段WINDOWS下的代码到linux下,编译测试发现系统进入死循环。调试了一下,系统进入了以下while死循环中: unsigned short * translate(unsignedchar* ***uf) { inti=0,j=0; intnsize = strlen(***uf); //unsignedchar 为单字节,unsigned short 为双字节 unsignedchar * strbuf = (unsigned char*)calloc(2,nsize+1); //重新为strbuf分配多一倍的字节空间 while(*(***uf+i)) //一直进行转换直到文件末尾 { if(*(***uf+i)<0x80) //如果要转换的为单字节时(ASCII)0000-007F: 则转换为0xxx xxxx { *(strbuf+j)=*(***uf+i); *(strbuf+j+1)=0; i++; j+=2; } elseif((*(***uf+i)&0xe0)==0xc0) //如果要转换的为双字节 0080-07FF:则转换为110xxxxx 10xxxxxx { *(strbuf+j)=(*(***uf+i)<<6)|(*(***uf+i+1)&0x3f); *(strbuf+j+1)=(*(***uf+i)>>2)&0x07; i+=2; j+=2; } else if((*(***uf+i)&0xf0)==0xe0) //如果要转换的为三字节 0800-FFFF:则转换为1110xxxx10xxxxxx 10xxxxxx { *(strbuf+j)=(*(***uf+i+1)<<6)|(*(***uf+i+2)&0x3f); *(strbuf+j+1)=(*(***uf+i)<<4)|((*(***uf+i+1)>>2)&0x0f); i+=3; j+=2; } //i++; } *(strbuf+j)=0; //为宽字符集增加结尾标志 *(strbuf+j+1)=0; return(unsigned short *)strbuf; //将strbuf的类型转化为双字节unsigned short } Sbuf缓冲区保存从dict.txt文件中读出的数据,调试发现,不是所有的数据都满足if、else if的条件,导致i值未被更新,使得系统无法退出while循环。请教各位高手,是不是dict.txt文件内容不适合此代码?如果不适合,该去哪里下载dict.txt文件?谢谢! |
|
相关推荐
2个回答
|
|
|
|
|
|
我是单片机小白,求麦肯单片机 MDT10P509编程软件
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
795 浏览 0 评论
4743 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2605 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2949 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
31683 浏览 11 评论
73061 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 06:06 , Processed in 0.577540 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号