高手帮忙看看这道c语言题,我实在想不出为什么结果不对

我编了一个程序,目的是把一个文件中的特定字符组合替换成其他字符串,和进行一些修改(如当遇到Son组合时把它后面和';'前的字符串括在括号中存入新的文档),并存入里一个文件... 我编了一个程序,目的是把一个文件中的特定字符组合替换成其他字符串,和进行一些修改(如当遇到Son组合时把它后面和';'前的字符串括在括号中存入新的文档),并存入里一个文件中,可是程序识别了“Son”后就不再向文件中写字符了,我想了三天也没向明白,谁知道这是怎么回事啊?那里错了,本来只有d=-1情况时程序可以得到正常结果,可当我加了d=-2时,也就是比d=-1时多加了个for循环就不能得到正常结果了,这是为什么啊???在线等

#include"stdio.h"
void writejava(int a);
void string(int a);
char*finishpath;
char*memory;
main()
{
FILE*fp;
char*filename="aa";
char b,f,c;
int d,e,i;
printf("please enter the path of the file: ");
scanf("%s",filename);
printf("ok~plesase enter the path of file finished");
scanf("%s",finishpath);
fp=fopen(filename,"r");
b=fgetc(fp);
f=fgetc(fp);
do{
d=0;
c=fgetc(fp);
if(b=='B'&&f=='u'&&c=='f')
d=-1;
if(b=='S'&&f=='o'&&c=='n'){
d=-2;
for(i=0;;i++)
{
if((c=fgetc(fp))==';')
break;
memory[i]=c;
}
memory[i]='\0';
}

if(d!=0){
writejava(d);
f=fgetc(fp);
c=fgetc(fp);
}
else{
e=b;
writejava(e);
}
b=f;
f=c;
}while(c!='@');
fclose(fp);
printf("ok");
}

void writejava(int a)
{
char c;
char*c1;
FILE*p;
p=fopen(finishpath,"a+");
if(a>=0)
{
c=a;
fputc(c,p);
}
fclose(p);
if(a<0)
string(a);
}

void string(int a)
{
char*c[30];
FILE*f;
f=fopen(finishpath,"a+");
c[1]="\");";
c[2]="System.out.println(\"";
c[3]="BufferedReader(new InputStreamReader(System.in))";

if(a==-1)
fputs(c[3],f);
if(a==-2){
fputs(c[2],f);
fputs(memory,f);
fputs(c[1],f);
} fclose(f);
}

filename是要修改的文件的路径
finishpath是完成修改后的文件的存储路径

要修改的文件是:

hello Buf good Son everyone; morning@

我把要修改的文件简化成一行文本了
展开
 我来答
忘至白葬不情必0T
2006-10-08 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
没仔细看程序,只看了开头,发现了一个初学者常犯的错误,就是char *变量没有正确地赋初值。char *filename="aa";的话,filename指向的是静态变量"aa",接下来再scanf的话,就是向静态数据区写数据,会发生不可预知的错误;而且finishpath也没有赋初值。建议filename和finishpath都声明为char [256];因为路径长度不会超过255。

另外,从文件中读字符串可以用fscanf,可以一次读出"Buf","Son"这样的字符串。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式