C语言电子词典的实现
来源:互联网 发布:端口不通怎么办 编辑:程序博客网 时间:2024/06/05 05:49
#include#include void main(){FILE *fp=NULL;char In[21],Dic[26];char temp;//int i=0;printf("输入单词\n");/*读取输入单词*/gets(In);fp=fopen("dictionary.txt","r");while(!feof(fp)){//i=0;/*读取字库里的单词方式1do{Dic[i]=temp;i++;temp=fgetc(fp);}while(temp!='\t');Dic[i]='\0';*///方式2fscanf(fp,"%s",Dic);if(strcmp(In,Dic)==0){temp=fgetc(fp);fgets(Dic,26,fp);//获取翻译结果break;}//文件位置指针换行//方式1://fgets(Dic,20,fp);//方式2:fscanf(fp,"%s",Dic);}if(!feof(fp))puts(Dic);elseprintf("字典里没有这个单词!");fclose(fp);}
"internationalization"是所查字典中最长的单词,20个字符,出于节省空间考虑,设In[21],最后一位是留给字符串结束标志'\0'。由于所查dictionary.txt文件中,中文部分最长有24个字符,故稍微多预留一点空间,取26;若取23,Dic[ ]数组就不能全部容纳部分单词的中文翻译部分的字符(比如26),在使用fgets()函数进行换行的时候,就会产生溢出(严重问题),由于VC6下不对这种数组溢出进行检查报错,编译可以通过,但是运行可能会出错。在本程序中,当某个单词的中文翻译部分所占字节数大于25时,其后的单词均查不出,因为下面这条语句会修改In数组的值:
fgets(Dic,26,fp);
本人在运行的时候就碰到这种情况:
经Debug设置断点进行调试后发现,系统是先给字符数组In[ ]分配存储空间,为:0x0018FF0C,接着才给Dic[ ]分配存储空间,为:0x0018FF24。从两者的地址可以看出,地址只相差24字节,这就限制了数组Dic[ ]的上限值。当发生溢出时,虽然程序中没有对In[ ]数组进行操作,但是,其值已经被修改,所以运行出错。
需要注意的是,本程序未进行相应的错误处理,溢出问题可能导致程序崩溃。
(注:txt文件来源于、电子词典的描述来源于:http://blog.csdn.net/sxhelijian/article/details/45438617)
阅读全文
0 0
- C语言电子词典的实现
- 电子词典C语言实现
- C语言 简单的在线电子词典
- C语言课程设计----电子词典
- 电子词典c语言图形界面
- C语言课程设计:小型电子词典
- 简易电子词典的实现
- 电子词典的实现
- 电子词典模拟软件 c语言源代码
- c语言写电子词典雏形算法
- C语言期末课程设计3.电子词典
- 第十九周—c语言 电子词典项目
- Android实现简单的电子词典
- 电子词典的实现(一)
- 电子词典的实现(二)
- 实现基于Android的英文电子词典
- 实现基于Android的英文电子词典
- 实现基于Android的英文电子词典
- BigDecimal用法 及其如何解决java数据精确计算
- [JZOJ3767]【BJOI2014】路径
- Vim 文本对象指南 (1)
- Linux监控工具vmstat命令详解
- android makefile学习笔记
- C语言电子词典的实现
- 使用networkx计算网络的介数中心性
- java中常用4种排序方法
- spring的定时任务
- android电话相关功能整合(读取通话记录、自动拨号、自动挂断、自动接听)
- shiro+spring
- SI疾病传播模型实现
- 自写 strlen strcpy函数
- 即将出版《Java EE 互联网轻量级框架整合开发》封面,准备源码中