免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4384 | 回复: 2

[应用] 关于linux下C编程的问题1 [复制链接]

论坛徽章:
0
发表于 2017-06-01 08:39 |显示全部楼层

各位高手,小弟正在开发电子词典,使用linux下C编程技术。从网上下载了一个WINDOWS下的电子词典源代码,然后下载了一个dict.txt文件。移植了一小段WINDOWS下的代码到linux下,编译测试发现系统进入死循环。调试了一下,系统进入了以下while死循环中:

unsigned short * translate(unsignedchar* sbuf)

{

         inti=0,j=0;

         intnsize = strlen(sbuf);      //unsignedchar 为单字节,unsigned short 为双字节

         unsignedchar * strbuf = (unsigned char*)calloc(2,nsize+1); //重新为strbuf分配多一倍的字节空间

         while(*(sbuf+i))                               //一直进行转换直到文件末尾                       

         {

                   if(*(sbuf+i)<0x80)         //如果要转换的为单字节时(ASCII)0000-007F: 则转换为0xxx xxxx

                   {

                            *(strbuf+j)=*(sbuf+i);

                            *(strbuf+j+1)=0;

                            i++;

                            j+=2;

                   }                 

                   elseif((*(sbuf+i)&0xe0)==0xc0)  //如果要转换的为双字节 0080-07FF:则转换为110xxxxx 10xxxxxx  

                   {                        

                            *(strbuf+j)=(*(sbuf+i)<<6)|(*(sbuf+i+1)&0x3f);

                            *(strbuf+j+1)=(*(sbuf+i)>>2)&0x07;

                            i+=2;

                            j+=2;

                   }

               else if((*(sbuf+i)&0xf0)==0xe0)  //如果要转换的为三字节 0800-FFFF:则转换为1110xxxx10xxxxxx 10xxxxxx

                   {

                           *(strbuf+j)=(*(sbuf+i+1)<<6)|(*(sbuf+i+2)&0x3f);

                            *(strbuf+j+1)=(*(sbuf+i)<<4)|((*(sbuf+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文件中读出的数据,调试发现,不是所有的数据都满足ifelse if的条件,导致i值未被更新,使得系统无法退出while循环。请教各位高手,是不是dict.txt文件内容不适合此代码?如果不适合,该去哪里下载dict.txt文件?谢谢!

论坛徽章:
0
发表于 2017-09-06 11:27 |显示全部楼层
全球前三的IP语音和视频设备的供应商,全球600多人,杭州研发中心有200多人,老板是美籍华人。
联系人:刘玉婷  电话:18758230569(绑定微信)
地址:杭州西湖区
一:高级Linux驱动开发工程师(Android设备方向)   年薪20-30万
岗位职责:
参与Android平台上的驱动和HAL层开发工作,并配合硬件人员的调试工作。
任职要求:
1、熟悉ARM平台的嵌入式系统开发过程,熟悉ARM的体系结构及相关底层软件的开发;
2、熟悉Uboot移植,Linux内核裁剪,根文件系统定制;
3、熟练掌握Linux驱动模型,熟悉CPU外设接口驱动程序(如I2C、SPI、I2S/PCM、LCD、以太网接口驱动调试等 );
4、具有丰富的Linux设备驱动调试经验和较强的软件bug定位和分析能力,具备较强的软硬件调试能力;
5、精通C语言,熟悉UNIX/Linux操作系统上的软件开发和编译环境,具有良好的编程风格;
6、有WiFi、蓝牙、HDMI等外设调试开发经验者优先考虑;有Android平台移植和Android设备开发经验者优先考虑。


二:系统软件主管     年薪:28-40万
1、 负责Android平台/Linux平台产品架构设计;
2、 2、负责产品性能优化、驱动开发及维护工作;
3、指导开发工程师进行驱动开发;
任职要求:
1、熟悉ARM平台的嵌入式系统开发过程,熟悉ARM的体系结构及相关底层软件的开发;
2、熟悉Uboot移植,Linux内核裁剪,根文件系统定制;
3、熟练掌握Linux驱动模型,熟悉CPU外设接口驱动程序(如I2C、SPI、I2S/PCM、LCD、以太网接口驱动调试等 );
4、精通C语言,熟悉UNIX/Linux操作系统上的软件开发和编译环境,具备较强的软硬件调试能力;
5、有以下其一经验者尤佳:
     1)Android平台移植、Android设备开发经验;
     2)WiFi/蓝牙/HDMI外设调试经验;
     3)SIP网关或服务器、语音板卡类相关经验;
     4)AP交换机、视频会议系统、终端产品等经验


论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2017-09-13 12:48 |显示全部楼层
wangxd5429 发表于 2017-06-01 08:39
各位高手,小弟正在开发电子词典,使用linux下C编程技术。从网上下载了一个WINDOWS下的电子词典源代码, ...

天知道你这个代码怎么来的即便如此,再加个else跳出循环写上“格式不支持”难道不会?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP