看看这个程序有声么问题,运行时不能打开文件为什么?谢谢
//在文件中查找字符串位置。#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#define ERROR 0
#define GOALSTR "abc"
typedef struct
{
int row;//目标串行序
int line;//目标串列序
int lastrow;//上一行字符数
}*locate;
int next[3];
void get_next(char T[],int next[])
{//模式串求next[j]数组参数:模式串名,整型数组。
int i,j;
i=1;
j=0;
next[1]=0;
while(i<T[0]&&j<T[0])
{
if(j==0||T[i]==T[j])
{
++i;
++j;
next[i]=j;
}
else j=next[j];
}
}//get_next
locate KMP(FILE *fp,char T[])
{//KMP算法返回存储模式串在文件中位置的指针,参数:文件指针,模式串。
int j=0;
char ch;
locate l;
ch=fgetc(fp);//从文件中读取一个字符。
l=(locate)malloc(sizeof(6));
l->row=l->line=1;
l->lastrow=0;//定义及初始化位置参数。
while(j<T[0]&&ch!=-1L)
{
if(ch=='\n')
{
++l->row;
l->lastrow=l->line-1;
ch=fgetc(fp);
l->line=1;
}
if(j==0||T[j]==ch)
{
++j;
ch=fgetc(fp);
++l->line;
}
else
j=next[j];
}
if(j>T[0])
{
if(l->line<T[0]+1)
{
--l->row;
l->line=l->line-T[0]-1+l->lastrow;
}
else
l->line=l->line-T[0]-1;
}
else
{
printf("no string can match !");
return 0;
}
return l;
}//KMP
main()
{
locate l;
FILE *fp;
char T[4];
T[0]='\3';
strcat(T,GOALSTR);
fp=fopen("D:\aaa.txt","r");
if(!fp)
{
printf("opening the file failed!");
exit(0);
}
get_next(T,next);
l=KMP(fp,T);
printf("被检字符串在文件第%d行,第%d列。",l->row,l->line);
return 0;
}//查找结束。
[ 本帖最后由 ghc123 于 2011-5-2 12:29 编辑 ]