我做一个统计中文词频的程序,包括程序文件1.c和待分析文件source.c(内容就是一些中文词),如下:
大家只需看看红色注释的地方,明明postition[0]->son->son和postition[0]->son->son->chi都不为空,但是运行时却在此处出现不能读的错误,苍天啊,大地啊.....
1.c
-----------------------------------------------------------------------------------------------------------------------------------------------------
#include<stdio.h>
#include<string.h>
#include<conio.h>
FILE *in;
int ai,bi;
struct list{
struct key *poi;
int i;};
struct key{
int i;
char chi[20];
struct key *son;};
struct con{
int i;
char chi[20];
struct con *next;
struct key *son;
};
struct con *position[10]={NULL};
struct con root={0,"ssss",NULL,NULL};
void change();
int look(char *);
int looks(struct con *,char *);
main(){
ai=1;bi=0;
change();
}
void change(){
char str[2]={0},pre[20]={0};
int a,b=0,c=0;
struct con *p;
in=fopen("source.c","r");
while(!feof(in)){
fgets(str,2,in);
if(str[0]!=32&&str[0]!=58&&str[0]!=59&&str[0]!=13&&str[0]!=10){
pre[b]=str[0];pre[b+1]=str[1];b++;}
else{
if(c==0){
if(look(pre)==1){
p=(struct con *)malloc(sizeof(struct con));if(!p) printf("space");
p->next=root.next;root.next=p;p->i=ai;p->son=NULL;strcpy(p->chi,pre);position[bi]=p;bi++;ai++;}
for(b=0;b<20;b++) pre[b]=0; b=0;
if(str[0]==58) {c=1;continue;}
if(str[0]==59) c=0;
}
if(c==1){
for(a=0;a<10&&position[a]!=NULL;a++){
if(looks(position[a],pre)==1){
p=(struct key *)malloc(sizeof(struct key));//这儿也是由于p类型为con,但却赋值为key,我用的VC不报错,后来问题就出在别的地方.如果单独看注释出错的地方,很难想到这儿出错.我错了......
if(!p) printf("space");
p->son=position[a]->son;position[a]->son=p;p->i=1;
strcpy(p->chi,pre);ai++;printf("ho%s",position[0]->son->son->chi);
}
}
if(position[0]->son->son->chi!=NULL) {printf("ha");printf("%s",position[0]->son->son->chi);}//请看这一句,明明指针不为空,怎么不能读取
if(str[0]==59) {c=0;for(a=0;a<10;a++) position[a]=NULL;bi=0;}
for(b=0;b<20;b++) pre[b]=0;b=0;
}
}
}
}
int look(char *c){
struct con *pp;
int i=1;
char te[20]={0};
pp=&root;
while(pp->next!=NULL){
pp=pp->next;
if(!strcmp(pp->chi,c)) {i=0;position[bi]=pp;bi++;break;}
else i=1;}
if(!strcmp(te,c)) i=0;
if(i==1) return 1;
if(i==0) return 0;
}
int looks(struct con *e,char *ca){
struct con *pp;
char te[20]={0};
pp=e;
if(!strcmp(te,ca)) return 0;
while(pp->son!=NULL){
pp=pp->son;//这儿pp是con类型,而pp->son为key
if(!strcmp(ca,pp->chi)) return 0;
}
return 1;
}
-----------------------------------------------------------------------------------------------------------------------------------------------------
source.c中的文本:
信息检索:索引 分词 ;
信息组织 组织:元数据 索引 ;
信息检索 : 索引 分词 ;
[此贴子已经被作者于2006-5-13 16:02:42编辑过]
----------------解决方案--------------------------------------------------------
两个地方指针类型异常赋值.
已用绿色标出.....
在哪跌倒,在哪起来....
[此贴子已经被作者于2006-5-13 16:03:33编辑过]
----------------解决方案--------------------------------------------------------