哪位达人给小弟看下为什么系统报错?
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i=0,j=0,k=0,l=0;
char q[3]={'a','b','c'};
char *p,*m,**n,**z;
char ch = 0;
FILE *fp;
char filename[10];
p=q;
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL){
printf("error open the file");
exit(0);
}
while(ch != -1)
ch=fgetc(fp);
j=ftell(fp);
m = (char *)malloc (j);
fseek(fp,1L,1);
i=j;
for(i=j;i>=0;i--)
{
ch=fgetc(fp);
fseek(fp,-2L,1);
*(m+i)=ch;
}
for(i=0;i<j-2;i++)
if(*(m+i)==*p)k=k+1;
n=(char **)malloc(k);
for(i=0;i<j-2;i++)
if(*(m+i)==*p){
*(n+l)=(m+i);
l++;
}
for(i=1;i<3;i++)
{
k=0;
for(j=0;j<l-(2-i);j++)
if(**(n+i)=*(p+i))
k=k+1;
z=(char **)malloc(k);
for(j=0;j<l-(2-i);j++)
if(**(n+i)=*(p+i)){
*(z+j)=*(n+i);
j++;
l=j;
}
n=z;
}
printf("%d",l);
}
这段代码目的是查找文件中的“abc”,然后将个数 l 输出。
算法是先把文件中的每个字符(除了最后两个)与a比较,再把符合的,取地址加一,取内容后与b比较,再如此与c 比较。最后输出符合的个数。
----------------解决方案--------------------------------------------------------
我刚把代码稍微改了一下:
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i=0,j=0,k=0,l=0,o=0;
char q[3]={'a','b','c'};
char *p,*m,**n,**z;
char ch = 0;
FILE *fp;
char filename[10];
p=q;
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL){
printf("error open the file");
exit(0);
}
while(ch != -1)
ch=fgetc(fp);
j=ftell(fp);
m = (char *)malloc (j);
fseek(fp,1L,1);
for(i=j;i>=0;i--)
{
ch=fgetc(fp);
fseek(fp,-2L,1);
*(m+i)=ch;
}
for(i=0;i<j-2;i++)
if(*(m+i)==*p)k++;
n=(char **)malloc(k);
for(i=0;i<j-2;i++)
if(*(m+i)==*p){
*(n+l)=(m+i);
l++;
}
for(i=1;i<3;i++)
{
k=0;
for(j=0;j<l-(2-i);j++)
if(*(*(n+j)+1)=*(p+i))
k++;
z=(char **)malloc(k);
for(j=0;j<l-(2-i);j++)
if(*(*(n+j)+1)=*(p+i)){
*(z+o)=*(n+j);
o++;
}
n=(char **)malloc(k);
n=z;
l=o;
}
printf("%d\n",l);
}
不报错了,但是结果却不对,debug时,蓝字部分系统会要求我 find source.
不知道为什么????
再拜达人!
----------------解决方案--------------------------------------------------------